diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..547a9d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.gradle +.settings +.classpath +.project +build +bin +proxyServer/bin +proxyServer/rundir +desktopRuntime/_eagstorage* +desktopRuntime/eclipseProject/bin* +desktopRuntime/hs_err_* +desktopRuntime/crash-reports/* +desktopRuntime/options.txt +desktopRuntime/_eagstorage* \ No newline at end of file diff --git a/CompileEPK.bat b/CompileEPK.bat new file mode 100644 index 0000000..a7ac88a --- /dev/null +++ b/CompileEPK.bat @@ -0,0 +1,6 @@ +@echo off +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 diff --git a/CompileEPK.sh b/CompileEPK.sh new file mode 100644 index 0000000..05f907c --- /dev/null +++ b/CompileEPK.sh @@ -0,0 +1,2 @@ +#!/bin/sh +java -jar "desktopRuntime/CompileEPK.jar" "desktopRuntime/resources" "javascript/assets.epk" \ No newline at end of file diff --git a/MakeOfflineDownload.bat b/MakeOfflineDownload.bat new file mode 100644 index 0000000..39fa1df --- /dev/null +++ b/MakeOfflineDownload.bat @@ -0,0 +1,4 @@ +@echo off +title MakeOfflineDownload +java -cp "desktopRuntime/MakeOfflineDownload.jar;desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeOfflineDownload "javascript/OfflineDownloadTemplate.txt" "javascript/classes.js;javascript/fix-webm-duration.js" "javascript/assets.epk" "javascript/EaglercraftX_1.8_Offline_en_US.html" "javascript/EaglercraftX_1.8_Offline_International.html" "javascript/lang" +pause \ No newline at end of file diff --git a/MakeOfflineDownload.sh b/MakeOfflineDownload.sh new file mode 100644 index 0000000..d62f333 --- /dev/null +++ b/MakeOfflineDownload.sh @@ -0,0 +1,2 @@ +#!/bin/sh +java -cp "desktopRuntime/MakeOfflineDownload.jar:desktopRuntime/CompileEPK.jar" net.lax1dude.eaglercraft.v1_8.buildtools.workspace.MakeOfflineDownload "javascript/OfflineDownloadTemplate.txt" "javascript/classes.js:javascript/fix-webm-duration.js" "javascript/assets.epk" "javascript/EaglercraftX_1.8_Offline_en_US.html" "javascript/EaglercraftX_1.8_Offline_International.html" "javascript/lang" \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..2ffc3d3 --- /dev/null +++ b/build.gradle @@ -0,0 +1,86 @@ + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath 'io.github.zebalu:teavm-gradle-plugin:1.0.0' + } +} + +apply plugin: 'java' +apply plugin: 'eclipse' +apply plugin: 'io.github.zebalu.teavm-gradle-plugin' + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +sourceSets { + main { + java { + srcDir 'src/main/java' + srcDir 'src/teavm/java' + } + } +} + +repositories { + mavenCentral() +} + +dependencies { + /** we use 0.6.1 due to performance issues on 7.0.0 */ + implementation 'org.teavm:teavm-platform:0.6.1' + implementation('org.teavm:teavm-classlib:0.6.1') { + exclude group: 'com.google.code.gson', module: 'gson' + } +} + +teavm { + + compileScopes = null; + minifying = true; + maxTopLevelNames = 10000; + properties = null; + debugInformationGenerated = false; + sourceMapsGenerated = true; + sourceFilesCopied = false; + incremental = false; + transformers = null; + + /** Where to save the result */ + targetDirectory = file("javascript"); + + /** The directory to monitor to decide if compile is up-to-date or not */ + sourceDirectory = file("src"); + + /** How to name the result file. */ + targetFileName = "classes.js"; + + /** Which class holds your public static void main(Strin[] args) method */ + mainClass = 'net.lax1dude.eaglercraft.v1_8.internal.teavm.MainClass'; + + /** This will be the name of your main method after compilation. */ + entryPointName = 'main'; + + classesToPreserve = null; + stopOnErrors = false; + optimizationLevel = "ADVANCED"; //org.teavm.vm.TeaVMOptimizationLevel.SIMPLE; + fastGlobalAnalysis = false; + targetType = "JAVASCRIPT"; //org.teavm.tooling.TeaVMTargetType.JAVASCRIPT; + cacheDirectory = null; + wasmVersion = "V_0x1"; //org.teavm.backend.wasm.render.WasmBinaryVersion.V_0x1; + minHeapSize = 4; + maxHeapSize = 128; + outOfProcess = false; + processMemory = 512; + longjmpSupported = true; + heapDump = false; + + /** Add name of configurations here where to look for jarfiles. */ + includeJarsFrom = []; + + /** By default teavmc taskd epends on javaCompile task, unless this varaibale is true. */ + skipJavaCompile = false; +} diff --git a/desktopRuntime/CompileEPK.jar b/desktopRuntime/CompileEPK.jar new file mode 100644 index 0000000..8b253fc Binary files /dev/null and b/desktopRuntime/CompileEPK.jar differ diff --git a/desktopRuntime/Java-WebSocket-1.5.1-with-dependencies.jar b/desktopRuntime/Java-WebSocket-1.5.1-with-dependencies.jar new file mode 100644 index 0000000..3600c46 Binary files /dev/null and b/desktopRuntime/Java-WebSocket-1.5.1-with-dependencies.jar differ diff --git a/desktopRuntime/LICENSE b/desktopRuntime/LICENSE new file mode 100644 index 0000000..a17ad0a --- /dev/null +++ b/desktopRuntime/LICENSE @@ -0,0 +1,29 @@ +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. \ No newline at end of file diff --git a/desktopRuntime/MakeOfflineDownload.jar b/desktopRuntime/MakeOfflineDownload.jar new file mode 100644 index 0000000..3d66dd7 Binary files /dev/null and b/desktopRuntime/MakeOfflineDownload.jar differ diff --git a/desktopRuntime/OpenAL.dll b/desktopRuntime/OpenAL.dll new file mode 100644 index 0000000..a34e1f0 Binary files /dev/null and b/desktopRuntime/OpenAL.dll differ diff --git a/desktopRuntime/angle_license.txt b/desktopRuntime/angle_license.txt new file mode 100644 index 0000000..88cc97c --- /dev/null +++ b/desktopRuntime/angle_license.txt @@ -0,0 +1,32 @@ +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. \ No newline at end of file diff --git a/desktopRuntime/codecjorbis-20101023.jar b/desktopRuntime/codecjorbis-20101023.jar new file mode 100644 index 0000000..e7e1f4a Binary files /dev/null and b/desktopRuntime/codecjorbis-20101023.jar differ diff --git a/desktopRuntime/codecwav-20101023.jar b/desktopRuntime/codecwav-20101023.jar new file mode 100644 index 0000000..7b6b1bd Binary files /dev/null and b/desktopRuntime/codecwav-20101023.jar differ diff --git a/desktopRuntime/d3dcompiler_47.dll b/desktopRuntime/d3dcompiler_47.dll new file mode 100644 index 0000000..a208e7e Binary files /dev/null and b/desktopRuntime/d3dcompiler_47.dll differ diff --git a/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch b/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch new file mode 100644 index 0000000..5445405 --- /dev/null +++ b/desktopRuntime/eclipseProject/eaglercraftDebugRuntime.launch @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/desktopRuntime/glfw.dll b/desktopRuntime/glfw.dll new file mode 100644 index 0000000..5f8d072 Binary files /dev/null and b/desktopRuntime/glfw.dll differ diff --git a/desktopRuntime/glfw_license.txt b/desktopRuntime/glfw_license.txt new file mode 100644 index 0000000..8a60e1d --- /dev/null +++ b/desktopRuntime/glfw_license.txt @@ -0,0 +1,21 @@ +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2010 Camilla Berglund + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. diff --git a/desktopRuntime/icon16.png b/desktopRuntime/icon16.png new file mode 100644 index 0000000..64e16b3 Binary files /dev/null and b/desktopRuntime/icon16.png differ diff --git a/desktopRuntime/icon32.png b/desktopRuntime/icon32.png new file mode 100644 index 0000000..9c9fc89 Binary files /dev/null and b/desktopRuntime/icon32.png differ diff --git a/desktopRuntime/javadoc/lwjgl-egl-javadoc.jar b/desktopRuntime/javadoc/lwjgl-egl-javadoc.jar new file mode 100644 index 0000000..6860a7a Binary files /dev/null and b/desktopRuntime/javadoc/lwjgl-egl-javadoc.jar differ diff --git a/desktopRuntime/javadoc/lwjgl-glfw-javadoc.jar b/desktopRuntime/javadoc/lwjgl-glfw-javadoc.jar new file mode 100644 index 0000000..9c45602 Binary files /dev/null and b/desktopRuntime/javadoc/lwjgl-glfw-javadoc.jar differ diff --git a/desktopRuntime/javadoc/lwjgl-javadoc.jar b/desktopRuntime/javadoc/lwjgl-javadoc.jar new file mode 100644 index 0000000..abe70ff Binary files /dev/null and b/desktopRuntime/javadoc/lwjgl-javadoc.jar differ diff --git a/desktopRuntime/javadoc/lwjgl-jemalloc-javadoc.jar b/desktopRuntime/javadoc/lwjgl-jemalloc-javadoc.jar new file mode 100644 index 0000000..80a167b Binary files /dev/null and b/desktopRuntime/javadoc/lwjgl-jemalloc-javadoc.jar differ diff --git a/desktopRuntime/javadoc/lwjgl-openal-javadoc.jar b/desktopRuntime/javadoc/lwjgl-openal-javadoc.jar new file mode 100644 index 0000000..d515e03 Binary files /dev/null and b/desktopRuntime/javadoc/lwjgl-openal-javadoc.jar differ diff --git a/desktopRuntime/javadoc/lwjgl-opengles-javadoc.jar b/desktopRuntime/javadoc/lwjgl-opengles-javadoc.jar new file mode 100644 index 0000000..afb0d89 Binary files /dev/null and b/desktopRuntime/javadoc/lwjgl-opengles-javadoc.jar differ diff --git a/desktopRuntime/jemalloc.dll b/desktopRuntime/jemalloc.dll new file mode 100644 index 0000000..70f9458 Binary files /dev/null and b/desktopRuntime/jemalloc.dll differ diff --git a/desktopRuntime/jemalloc_license.txt b/desktopRuntime/jemalloc_license.txt new file mode 100644 index 0000000..fd57978 --- /dev/null +++ b/desktopRuntime/jemalloc_license.txt @@ -0,0 +1,27 @@ +Unless otherwise specified, files in the jemalloc source distribution are +subject to the following license: +-------------------------------------------------------------------------------- +Copyright (C) 2002-2018 Jason Evans . +All rights reserved. +Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved. +Copyright (C) 2009-2018 Facebook, 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(s), + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice(s), + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (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 new file mode 100644 index 0000000..d7e6e9d --- /dev/null +++ b/desktopRuntime/khronos_license.txt @@ -0,0 +1,22 @@ +/* +** Copyright (c) 2013-2014 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are 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 Materials. +** +** THE MATERIALS ARE 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 +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ \ No newline at end of file diff --git a/desktopRuntime/libEGL.dll b/desktopRuntime/libEGL.dll new file mode 100644 index 0000000..0df205a Binary files /dev/null and b/desktopRuntime/libEGL.dll differ diff --git a/desktopRuntime/libGLESv2.dll b/desktopRuntime/libGLESv2.dll new file mode 100644 index 0000000..68170ca Binary files /dev/null and b/desktopRuntime/libGLESv2.dll differ diff --git a/desktopRuntime/liburing_license.txt b/desktopRuntime/liburing_license.txt new file mode 100644 index 0000000..67bc330 --- /dev/null +++ b/desktopRuntime/liburing_license.txt @@ -0,0 +1,7 @@ +Copyright 2020 Jens Axboe + +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. \ No newline at end of file diff --git a/desktopRuntime/lwjgl-egl.jar b/desktopRuntime/lwjgl-egl.jar new file mode 100644 index 0000000..eb959b9 Binary files /dev/null and b/desktopRuntime/lwjgl-egl.jar differ diff --git a/desktopRuntime/lwjgl-glfw.jar b/desktopRuntime/lwjgl-glfw.jar new file mode 100644 index 0000000..f3961ac Binary files /dev/null and b/desktopRuntime/lwjgl-glfw.jar differ diff --git a/desktopRuntime/lwjgl-jemalloc.jar b/desktopRuntime/lwjgl-jemalloc.jar new file mode 100644 index 0000000..3ef8862 Binary files /dev/null and b/desktopRuntime/lwjgl-jemalloc.jar differ diff --git a/desktopRuntime/lwjgl-openal.jar b/desktopRuntime/lwjgl-openal.jar new file mode 100644 index 0000000..97595e3 Binary files /dev/null and b/desktopRuntime/lwjgl-openal.jar differ diff --git a/desktopRuntime/lwjgl-opengles.jar b/desktopRuntime/lwjgl-opengles.jar new file mode 100644 index 0000000..d1efbcc Binary files /dev/null and b/desktopRuntime/lwjgl-opengles.jar differ diff --git a/desktopRuntime/lwjgl.dll b/desktopRuntime/lwjgl.dll new file mode 100644 index 0000000..1fc33f9 Binary files /dev/null and b/desktopRuntime/lwjgl.dll differ diff --git a/desktopRuntime/lwjgl.jar b/desktopRuntime/lwjgl.jar new file mode 100644 index 0000000..2d84fdc Binary files /dev/null and b/desktopRuntime/lwjgl.jar differ diff --git a/desktopRuntime/lwjgl_opengles.dll b/desktopRuntime/lwjgl_opengles.dll new file mode 100644 index 0000000..092db9d Binary files /dev/null and b/desktopRuntime/lwjgl_opengles.dll differ diff --git a/desktopRuntime/openal_soft_license.txt b/desktopRuntime/openal_soft_license.txt new file mode 100644 index 0000000..5bc8fb2 --- /dev/null +++ b/desktopRuntime/openal_soft_license.txt @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library 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 library 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 library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/desktopRuntime/resources/assets/eagler/CREDITS.txt b/desktopRuntime/resources/assets/eagler/CREDITS.txt new file mode 100644 index 0000000..b2d4d91 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/CREDITS.txt @@ -0,0 +1,651 @@ + + EaglercraftX Developers + ~~~~~~~~~~~~~~~~~~~~~~~ + + lax1dude: + + - Creator of Eaglercraft + - Ported the Minecraft 1.8 client src to TeaVM + - Wrote HW accelerated OpenGL 1.3 emulator + - Wrote the default shader pack + - Made the integrated PBR resource pack + - Wrote all desktop emulation code + - Wrote EaglercraftXBungee + - Wrote the patch and build system + + ayunami2000: + + - Many bug fixes + - Added resource packs + - Added screen recording + - Added seamless fullscreen + - Created the replit + + + + Code used within EaglercraftX + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + 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: 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 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: 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: 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 + + * 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: 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. + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/desktopRuntime/resources/assets/eagler/eagtek.png b/desktopRuntime/resources/assets/eagler/eagtek.png new file mode 100644 index 0000000..44008fc Binary files /dev/null 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 new file mode 100644 index 0000000..36e3cf4 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/accel_font.fsh @@ -0,0 +1,34 @@ +#line 2 + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +precision lowp int; +precision mediump float; +precision mediump sampler2D; + +in vec2 v_texCoord2f; +in vec4 v_color4f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_inputTexture; +uniform vec4 u_colorBias4f; + +void main() { + output4f = texture(u_inputTexture, v_texCoord2f) * v_color4f + u_colorBias4f; + if(output4f.a < 0.004) { + discard; + } +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh b/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh new file mode 100644 index 0000000..578e0cc --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/accel_font.vsh @@ -0,0 +1,51 @@ +#line 2 + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +precision lowp int; +precision highp float; +precision mediump sampler2D; + +layout(location = 0) in vec3 a_position3f; + +layout(location = 1) in vec2 c_position2i; +layout(location = 2) in vec2 c_coords2i; +layout(location = 3) in vec4 c_color4f; + +out vec2 v_texCoord2f; +out vec4 v_color4f; + +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; + gl_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 new file mode 100644 index 0000000..60d4639 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.fsh @@ -0,0 +1,33 @@ +#line 2 + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +precision lowp int; +precision mediump float; +precision mediump sampler2D; + +in vec2 v_texCoord2f; +in vec4 v_color4f; + +layout(location = 0) out vec4 output4f; + +uniform sampler2D u_inputTexture; + +void main() { + output4f = texture(u_inputTexture, v_texCoord2f) * v_color4f; + if(output4f.a < 0.004) { + discard; + } +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh new file mode 100644 index 0000000..6ed0113 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/accel_particle.vsh @@ -0,0 +1,58 @@ +#line 2 + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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; + +uniform mat4 u_matrixTransform; +uniform vec3 u_texCoordSize2f_particleSize1f; +uniform vec4 u_transformParam_1_2_3_4_f; +uniform float u_transformParam_5_f; +uniform vec4 u_color4f; + +uniform sampler2D u_lightmapTexture; + +void main() { + v_color4f = u_color4f * p_color4f.bgra * texture(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; + pos3f.x += u_transformParam_1_2_3_4_f.x * particleSize * a_position2f.x; + pos3f.x += u_transformParam_1_2_3_4_f.w * particleSize * a_position2f.y; + pos3f.y += u_transformParam_1_2_3_4_f.y * particleSize * a_position2f.y; + pos3f.z += u_transformParam_1_2_3_4_f.z * particleSize * a_position2f.x; + pos3f.z += u_transformParam_5_f * particleSize * a_position2f.y; + + gl_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 new file mode 100644 index 0000000..23ce5be --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/core.fsh @@ -0,0 +1,181 @@ +#line 2 + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG) +in vec4 v_position4f; +#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; +#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; +#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 +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 + +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 texGenVector; + + vec4 texGenPosSrc[2]; + texGenPosSrc[0] = vec4(v_objectPosition3f, 1.0); + texGenPosSrc[1] = v_position4f; + + texGenVector.x = dot(texGenPosSrc[u_texGenPlane4i.x], u_texGenS4f); + texGenVector.y = dot(texGenPosSrc[u_texGenPlane4i.y], u_texGenT4f); + texGenVector.z = dot(texGenPosSrc[u_texGenPlane4i.z], u_texGenR4f); + texGenVector.w = dot(texGenPosSrc[u_texGenPlane4i.w], u_texGenQ4f); + + texGenVector = u_textureMat4f01 * texGenVector; + color *= texture(u_samplerTexture, texGenVector.xy / texGenVector.w); + +#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_ENABLE_LIGHTMAP +#ifdef COMPILE_LIGHTMAP_ATTRIB + color *= texture(u_samplerLightmap, v_lightmap2f); +#else + color *= texture(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; + 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/core.vsh b/desktopRuntime/resources/assets/eagler/glsl/core.vsh new file mode 100644 index 0000000..194ae44 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/core.vsh @@ -0,0 +1,97 @@ +#line 2 + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +in vec3 a_position3f; + +#if defined(COMPILE_ENABLE_TEX_GEN) || defined(COMPILE_ENABLE_FOG) +#define _COMPILE_VARYING_POSITION +#endif + +#ifdef _COMPILE_VARYING_POSITION +out vec4 v_position4f; +#endif + +#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 + +#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 + gl_Position = u_projectionMat4f * v_position4f; +#else + gl_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 new file mode 100644 index 0000000..370b0ae --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle.vsh @@ -0,0 +1,72 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 vec4 u_transformParam_1_2_3_4_f; +uniform float u_transformParam_5_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; + pos3f.x += u_transformParam_1_2_3_4_f.x * particleSize * a_position2f.x; + pos3f.x += u_transformParam_1_2_3_4_f.w * particleSize * a_position2f.y; + pos3f.y += u_transformParam_1_2_3_4_f.y * particleSize * a_position2f.y; + pos3f.z += u_transformParam_1_2_3_4_f.z * particleSize * a_position2f.x; + pos3f.z += u_transformParam_5_f * particleSize * a_position2f.y; + +#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 new file mode 100644 index 0000000..ba1d8e0 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_forward.fsh @@ -0,0 +1,233 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..db34c77 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/accel_particle_gbuffer.fsh @@ -0,0 +1,42 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..9bd0364 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/readme.txt @@ -0,0 +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 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_end_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_end_s.ebp new file mode 100644 index 0000000..f87d047 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_end_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_side_s.ebp new file mode 100644 index 0000000..f87d047 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_top_s.ebp new file mode 100644 index 0000000..9447599 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_feet_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_end_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_end_s.ebp new file mode 100644 index 0000000..9ab55d7 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_end_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_side_s.ebp new file mode 100644 index 0000000..41ad33d Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_top_s.ebp new file mode 100644 index 0000000..4eeb6b0 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bed_head_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bedrock_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bedrock_s.ebp new file mode 100644 index 0000000..d3ec27b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bedrock_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bookshelf_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bookshelf_s.ebp new file mode 100644 index 0000000..3258298 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/bookshelf_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_base_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_base_s.ebp new file mode 100644 index 0000000..3f4a00b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_base_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_s.ebp new file mode 100644 index 0000000..77b8599 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brewing_stand_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brick_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brick_s.ebp new file mode 100644 index 0000000..907f428 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/brick_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_inner_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_inner_s.ebp new file mode 100644 index 0000000..3742fd9 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_inner_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_side_s.ebp new file mode 100644 index 0000000..1c00111 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_top_s.ebp new file mode 100644 index 0000000..4992148 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cake_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coal_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coal_ore_s.ebp new file mode 100644 index 0000000..9ec792c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coal_ore_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coarse_dirt_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coarse_dirt_s.ebp new file mode 100644 index 0000000..4172a2f Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/coarse_dirt_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_mossy_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_mossy_s.ebp new file mode 100644 index 0000000..d1bde27 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_mossy_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_s.ebp new file mode 100644 index 0000000..6fe1ad3 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/cobblestone_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_off_s.ebp new file mode 100644 index 0000000..417e829 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_off_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_on_s.ebp new file mode 100644 index 0000000..090f2b3 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/comparator_on_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_front_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_front_s.ebp new file mode 100644 index 0000000..aecf755 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_front_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_side_s.ebp new file mode 100644 index 0000000..1553d92 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_top_s.ebp new file mode 100644 index 0000000..6d0f74f Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/crafting_table_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_block_s.ebp new file mode 100644 index 0000000..8655736 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_block_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_ore_s.ebp new file mode 100644 index 0000000..1f97962 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/diamond_ore_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_side_s.ebp new file mode 100644 index 0000000..94cd1a4 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_top_s.ebp new file mode 100644 index 0000000..6588620 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_podzol_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_s.ebp new file mode 100644 index 0000000..fa62447 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dirt_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_horizontal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_horizontal_s.ebp new file mode 100644 index 0000000..03cb6fa Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_horizontal_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_vertical_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_vertical_s.ebp new file mode 100644 index 0000000..f4e1ff0 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dispenser_front_vertical_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_lower_s.ebp new file mode 100644 index 0000000..d271151 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_lower_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_upper_s.ebp new file mode 100644 index 0000000..603f97e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_acacia_upper_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_lower_s.ebp new file mode 100644 index 0000000..2320e29 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_lower_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_upper_s.ebp new file mode 100644 index 0000000..85495b1 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_birch_upper_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_lower_s.ebp new file mode 100644 index 0000000..ac3b3cf Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_lower_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_upper_s.ebp new file mode 100644 index 0000000..ecf07eb Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_dark_oak_upper_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_lower_s.ebp new file mode 100644 index 0000000..2320e29 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_lower_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_upper_s.ebp new file mode 100644 index 0000000..5ffd31b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_jungle_upper_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_lower_s.ebp new file mode 100644 index 0000000..4680cea Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_lower_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_upper_s.ebp new file mode 100644 index 0000000..ae3ae02 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_spruce_upper_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_lower_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_lower_s.ebp new file mode 100644 index 0000000..2320e29 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_lower_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_upper_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_upper_s.ebp new file mode 100644 index 0000000..5ffd31b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/door_wood_upper_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_horizontal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_horizontal_s.ebp new file mode 100644 index 0000000..51ac891 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_horizontal_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_vertical_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_vertical_s.ebp new file mode 100644 index 0000000..b86068b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/dropper_front_vertical_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_block_s.ebp new file mode 100644 index 0000000..8ac491e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_block_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_ore_s.ebp new file mode 100644 index 0000000..921b489 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/emerald_ore_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_bottom_s.ebp new file mode 100644 index 0000000..e4f4142 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_bottom_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_side_s.ebp new file mode 100644 index 0000000..1790570 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_top_s.ebp new file mode 100644 index 0000000..05783e2 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/enchanting_table_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/end_stone_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/end_stone_s.ebp new file mode 100644 index 0000000..5dac74b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/end_stone_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_side_s.ebp new file mode 100644 index 0000000..5e064d5 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_top_s.ebp new file mode 100644 index 0000000..0e706d3 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/endframe_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_dry_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_dry_s.ebp new file mode 100644 index 0000000..e6f8a5d Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_dry_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_wet_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_wet_s.ebp new file mode 100644 index 0000000..32b3fc4 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/farmland_wet_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_off_s.ebp new file mode 100644 index 0000000..2c743ff Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_off_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_on_s.ebp new file mode 100644 index 0000000..0cc7e97 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_front_on_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_side_s.ebp new file mode 100644 index 0000000..ecfa0dc Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_top_s.ebp new file mode 100644 index 0000000..9a6e99c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/furnace_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_block_s.ebp new file mode 100644 index 0000000..5a50649 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_block_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_ore_s.ebp new file mode 100644 index 0000000..43efaed Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gold_ore_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_overlay_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_overlay_s.ebp new file mode 100644 index 0000000..7669983 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_overlay_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_s.ebp new file mode 100644 index 0000000..0e0a24c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_snowed_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_snowed_s.ebp new file mode 100644 index 0000000..5fc483f Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_side_snowed_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_top_s.ebp new file mode 100644 index 0000000..ec9cd19 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/grass_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gravel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gravel_s.ebp new file mode 100644 index 0000000..a2b1db9 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/gravel_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_block_s.ebp new file mode 100644 index 0000000..72ce37e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_block_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_ore_s.ebp new file mode 100644 index 0000000..dbcab97 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/iron_ore_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_block_s.ebp new file mode 100644 index 0000000..0a0eb61 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_block_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_ore_s.ebp new file mode 100644 index 0000000..29fa1f0 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/lapis_ore_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_s.ebp new file mode 100644 index 0000000..564a2cf Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_top_s.ebp new file mode 100644 index 0000000..4a9b825 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_acacia_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_s.ebp new file mode 100644 index 0000000..564a2cf Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_top_s.ebp new file mode 100644 index 0000000..4a9b825 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_big_oak_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_s.ebp new file mode 100644 index 0000000..564a2cf Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_top_s.ebp new file mode 100644 index 0000000..4a9b825 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_birch_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_s.ebp new file mode 100644 index 0000000..aebc8aa Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_top_s.ebp new file mode 100644 index 0000000..4a9b825 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_jungle_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_s.ebp new file mode 100644 index 0000000..564a2cf Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_top_s.ebp new file mode 100644 index 0000000..4a9b825 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_oak_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_s.ebp new file mode 100644 index 0000000..564a2cf Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_top_s.ebp new file mode 100644 index 0000000..4a9b825 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/log_spruce_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/netherrack_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/netherrack_s.ebp new file mode 100644 index 0000000..7f4790a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/netherrack_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/obsidian_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/obsidian_s.ebp new file mode 100644 index 0000000..e4f4142 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/obsidian_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_bottom_s.ebp new file mode 100644 index 0000000..9a6e99c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_bottom_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_inner_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_inner_s.ebp new file mode 100644 index 0000000..63ded0c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_inner_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_side_s.ebp new file mode 100644 index 0000000..bde3fbb Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_normal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_normal_s.ebp new file mode 100644 index 0000000..4127126 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_normal_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_sticky_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_sticky_s.ebp new file mode 100644 index 0000000..9e8c1f2 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/piston_top_sticky_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_acacia_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_acacia_s.ebp new file mode 100644 index 0000000..e01979a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_acacia_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_big_oak_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_big_oak_s.ebp new file mode 100644 index 0000000..e01979a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_big_oak_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_birch_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_birch_s.ebp new file mode 100644 index 0000000..e01979a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_birch_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_jungle_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_jungle_s.ebp new file mode 100644 index 0000000..e01979a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_jungle_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_oak_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_oak_s.ebp new file mode 100644 index 0000000..e01979a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_oak_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_spruce_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_spruce_s.ebp new file mode 100644 index 0000000..e01979a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/planks_spruce_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_bricks_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_bricks_s.ebp new file mode 100644 index 0000000..eb9d696 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_bricks_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_dark_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_dark_s.ebp new file mode 100644 index 0000000..2a99d36 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_dark_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_rough_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_rough_s.ebp new file mode 100644 index 0000000..589b79e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/prismarine_rough_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_off_s.ebp new file mode 100644 index 0000000..e3e4a1b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_off_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_on_s.ebp new file mode 100644 index 0000000..053b960 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/pumpkin_face_on_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_bottom_s.ebp new file mode 100644 index 0000000..d099843 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_bottom_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_s.ebp new file mode 100644 index 0000000..d838c37 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_top_s.ebp new file mode 100644 index 0000000..649ed0f Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_chiseled_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_s.ebp new file mode 100644 index 0000000..0f72892 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_top_s.ebp new file mode 100644 index 0000000..4d020b2 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_lines_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_side_s.ebp new file mode 100644 index 0000000..ce73796 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_top_s.ebp new file mode 100644 index 0000000..ce73796 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_block_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_ore_s.ebp new file mode 100644 index 0000000..f2ed489 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/quartz_ore_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_powered_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_powered_s.ebp new file mode 100644 index 0000000..edb43d1 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_powered_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_s.ebp new file mode 100644 index 0000000..0993565 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_activator_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_powered_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_powered_s.ebp new file mode 100644 index 0000000..6b915f1 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_powered_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_s.ebp new file mode 100644 index 0000000..0799d9b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_detector_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_powered_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_powered_s.ebp new file mode 100644 index 0000000..03de3af Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_powered_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_s.ebp new file mode 100644 index 0000000..a29e96c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_golden_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_s.ebp new file mode 100644 index 0000000..87b59b1 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_turned_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_turned_s.ebp new file mode 100644 index 0000000..1e70e81 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/rail_normal_turned_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_off_s.ebp new file mode 100644 index 0000000..cab7601 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_off_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_on_s.ebp new file mode 100644 index 0000000..036a840 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_lamp_on_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_ore_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_ore_s.ebp new file mode 100644 index 0000000..82b1b5c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_ore_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_off_s.ebp new file mode 100644 index 0000000..b3a8024 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_off_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_on_s.ebp new file mode 100644 index 0000000..a7099c0 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/redstone_torch_on_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_off_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_off_s.ebp new file mode 100644 index 0000000..d59493d Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_off_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_on_s.ebp new file mode 100644 index 0000000..a42202a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/repeater_on_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sand_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sand_s.ebp new file mode 100644 index 0000000..6672b3c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sand_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_bottom_s.ebp new file mode 100644 index 0000000..0982a82 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_bottom_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_carved_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_carved_s.ebp new file mode 100644 index 0000000..b9ca942 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_carved_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_normal_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_normal_s.ebp new file mode 100644 index 0000000..2de9bba Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_normal_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_smooth_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_smooth_s.ebp new file mode 100644 index 0000000..527dada Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_smooth_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_top_s.ebp new file mode 100644 index 0000000..3791fc4 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/sandstone_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/soul_sand_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/soul_sand_s.ebp new file mode 100644 index 0000000..f128bdb Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/soul_sand_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_s.ebp new file mode 100644 index 0000000..7d3463d Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_smooth_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_smooth_s.ebp new file mode 100644 index 0000000..e8269f1 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_andesite_smooth_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_s.ebp new file mode 100644 index 0000000..20fea69 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_smooth_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_smooth_s.ebp new file mode 100644 index 0000000..e919c96 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_diorite_smooth_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_s.ebp new file mode 100644 index 0000000..bb4dcb7 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_smooth_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_smooth_s.ebp new file mode 100644 index 0000000..6d4e8e7 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_granite_smooth_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_s.ebp new file mode 100644 index 0000000..1651f26 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_side_s.ebp new file mode 100644 index 0000000..dfcb204 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_top_s.ebp new file mode 100644 index 0000000..348db64 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stone_slab_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_carved_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_carved_s.ebp new file mode 100644 index 0000000..cb99d68 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_carved_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_cracked_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_cracked_s.ebp new file mode 100644 index 0000000..ad45937 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_cracked_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_mossy_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_mossy_s.ebp new file mode 100644 index 0000000..2d78a57 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_mossy_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_s.ebp new file mode 100644 index 0000000..6868e14 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/stonebrick_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_bottom_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_bottom_s.ebp new file mode 100644 index 0000000..661b21f Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_bottom_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_side_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_side_s.ebp new file mode 100644 index 0000000..1aa8886 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_side_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_top_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_top_s.ebp new file mode 100644 index 0000000..fb7610e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/tnt_top_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/torch_on_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/torch_on_s.ebp new file mode 100644 index 0000000..33adc9b Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/torch_on_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trapdoor_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trapdoor_s.ebp new file mode 100644 index 0000000..3d590fa Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trapdoor_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trip_wire_source_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trip_wire_source_s.ebp new file mode 100644 index 0000000..aca2f5e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/blocks/trip_wire_source_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_0_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_0_s.ebp new file mode 100644 index 0000000..f60b3d0 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_0_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_1_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_1_s.ebp new file mode 100644 index 0000000..be777dd Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_1_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_2_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_2_s.ebp new file mode 100644 index 0000000..79a1f9d Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_pulling_2_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_standby_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_standby_s.ebp new file mode 100644 index 0000000..af3c5cf Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bow_standby_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/brewing_stand_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/brewing_stand_s.ebp new file mode 100644 index 0000000..cfff2fc Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/brewing_stand_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_lava_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_lava_s.ebp new file mode 100644 index 0000000..56b64eb Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_lava_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_milk_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_milk_s.ebp new file mode 100644 index 0000000..a7f7e74 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_milk_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_water_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_water_s.ebp new file mode 100644 index 0000000..a07b518 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/bucket_water_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/carrot_on_a_stick_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/carrot_on_a_stick_s.ebp new file mode 100644 index 0000000..339ee07 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/carrot_on_a_stick_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/clock_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/clock_s.ebp new file mode 100644 index 0000000..d2cd483 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/clock_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/compass_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/compass_s.ebp new file mode 100644 index 0000000..d66a293 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/compass_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_axe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_axe_s.ebp new file mode 100644 index 0000000..60a45db Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_axe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_hoe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_hoe_s.ebp new file mode 100644 index 0000000..41b89e3 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_hoe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_pickaxe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_pickaxe_s.ebp new file mode 100644 index 0000000..c09e9b3 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_pickaxe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_shovel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_shovel_s.ebp new file mode 100644 index 0000000..fdc6e0e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_shovel_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_sword_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_sword_s.ebp new file mode 100644 index 0000000..969b360 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/diamond_sword_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_cast_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_cast_s.ebp new file mode 100644 index 0000000..5098437 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_cast_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_uncast_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_uncast_s.ebp new file mode 100644 index 0000000..0530e40 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/fishing_rod_uncast_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/flint_and_steel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/flint_and_steel_s.ebp new file mode 100644 index 0000000..8e55ba3 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/flint_and_steel_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_axe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_axe_s.ebp new file mode 100644 index 0000000..e8c081e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_axe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_hoe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_hoe_s.ebp new file mode 100644 index 0000000..7ec0ebe Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_hoe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_pickaxe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_pickaxe_s.ebp new file mode 100644 index 0000000..ce0adb6 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_pickaxe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_shovel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_shovel_s.ebp new file mode 100644 index 0000000..1e3c575 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_shovel_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_sword_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_sword_s.ebp new file mode 100644 index 0000000..0023c9f Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/gold_sword_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_axe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_axe_s.ebp new file mode 100644 index 0000000..96e7562 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_axe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_hoe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_hoe_s.ebp new file mode 100644 index 0000000..aabf4a1 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_hoe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_pickaxe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_pickaxe_s.ebp new file mode 100644 index 0000000..e9a82c5 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_pickaxe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_shovel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_shovel_s.ebp new file mode 100644 index 0000000..aafb70d Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_shovel_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_sword_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_sword_s.ebp new file mode 100644 index 0000000..dc31fb6 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/iron_sword_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_chest_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_chest_s.ebp new file mode 100644 index 0000000..5cce2f9 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_chest_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_command_block_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_command_block_s.ebp new file mode 100644 index 0000000..5cce2f9 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_command_block_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_furnace_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_furnace_s.ebp new file mode 100644 index 0000000..5cce2f9 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_furnace_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_tnt_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_tnt_s.ebp new file mode 100644 index 0000000..5cce2f9 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/minecart_tnt_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/shears_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/shears_s.ebp new file mode 100644 index 0000000..f6ee11c Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/shears_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_axe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_axe_s.ebp new file mode 100644 index 0000000..8584d6e Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_axe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_hoe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_hoe_s.ebp new file mode 100644 index 0000000..da948d7 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_hoe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_pickaxe_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_pickaxe_s.ebp new file mode 100644 index 0000000..56feb84 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_pickaxe_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_shovel_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_shovel_s.ebp new file mode 100644 index 0000000..818e25a Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_shovel_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_sword_s.ebp b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_sword_s.ebp new file mode 100644 index 0000000..439f953 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/assets_pbr/textures/items/stone_sword_s.ebp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/brdf_lut.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/brdf_lut.bmp new file mode 100644 index 0000000..54b6c70 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/brdf_lut.bmp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh new file mode 100644 index 0000000..d262432 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_noise3d.fsh @@ -0,0 +1,55 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..b943090 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sample.fsh @@ -0,0 +1,92 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.bmp new file mode 100644 index 0000000..f4743c8 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.bmp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh new file mode 100644 index 0000000..a114c3c --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.fsh @@ -0,0 +1,33 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..d924262 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_shapes.vsh @@ -0,0 +1,30 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..69a75dc --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/clouds_sun_occlusion.fsh @@ -0,0 +1,48 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..97d71d2 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_combine.fsh @@ -0,0 +1,172 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..2c55f01 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core.vsh @@ -0,0 +1,114 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 * (3.0 - 2.0 * valueOut) * 2.0 - 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 new file mode 100644 index 0000000..0eb9113 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_core_gbuffer.fsh @@ -0,0 +1,166 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +#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); +} diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh new file mode 100644 index 0000000..5de9250 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_fog.fsh @@ -0,0 +1,101 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 = sqrt(dot(fragPos4f.xyz, 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 + envMapSample3f *= pow(textureLod(u_lightShaftsTexture, v_position2f, 0.0).r * 0.9 + 0.1, 2.25); + f = f * 0.9 + 0.1; +#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 new file mode 100644 index 0000000..5eb264a --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_local.vsh @@ -0,0 +1,28 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..bcebefb --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.fsh @@ -0,0 +1,59 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +#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 new file mode 100644 index 0000000..e44f3f4 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/deferred_shadow.vsh @@ -0,0 +1,101 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 * (3.0 - 2.0 * valueOut) * 2.0 - 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/dither16.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/dither16.bmp new file mode 100644 index 0000000..57813a0 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/dither16.bmp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/eagler_moon.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/eagler_moon.bmp new file mode 100644 index 0000000..53cabae Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/eagler_moon.bmp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv new file mode 100644 index 0000000..6056c8b --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/emissive_items.csv @@ -0,0 +1,9 @@ +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 \ No newline at end of file diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh new file mode 100644 index 0000000..107648f --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.fsh @@ -0,0 +1,471 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 texGenVector; + vec4 texGenPosSrc[2]; + texGenPosSrc[0] = vec4(v_objectPosition3f, 1.0); + texGenPosSrc[1] = v_position4f; + texGenVector.x = dot(texGenPosSrc[u_texGenPlane4i.x], u_texGenS4f); + texGenVector.y = dot(texGenPosSrc[u_texGenPlane4i.y], u_texGenT4f); + texGenVector.z = dot(texGenPosSrc[u_texGenPlane4i.z], u_texGenR4f); + texGenVector.w = dot(texGenPosSrc[u_texGenPlane4i.w], u_texGenQ4f); + texGenVector = vec4(mat4x3( + u_textureMat4f01[0].xyw, + u_textureMat4f01[1].xyw, + u_textureMat4f01[2].xyw, + u_textureMat4f01[3].xyw + ) * texGenVector, 0.0); + 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 = sqrt(dot(v_position4f.xyz, 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 new file mode 100644 index 0000000..0ce8b14 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_core.vsh @@ -0,0 +1,101 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..25a55c1 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.fsh @@ -0,0 +1,306 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 = sqrt(dot(v_position4f.xyz, 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 new file mode 100644 index 0000000..d98b245 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/forward_glass_highlights.vsh @@ -0,0 +1,52 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..1135edc --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/gbuffer_debug_view.fsh @@ -0,0 +1,109 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..5c25e67 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/hand_depth_mask.fsh @@ -0,0 +1,27 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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_ghosts.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_ghosts.bmp new file mode 100644 index 0000000..29fd027 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_ghosts.bmp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_streaks.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_streaks.bmp new file mode 100644 index 0000000..1f470c2 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_streaks.bmp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh new file mode 100644 index 0000000..83c27a2 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lens_sun_occlusion.fsh @@ -0,0 +1,68 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..7eb62fc --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_env_map.glsl @@ -0,0 +1,120 @@ + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +#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 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl new file mode 100644 index 0000000..87f9072 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/pbr_lighting.glsl @@ -0,0 +1,86 @@ + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +#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 new file mode 100644 index 0000000..8d9d61f --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lib/waving_blocks.glsl @@ -0,0 +1,218 @@ + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +#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;\ + }\ + pos4f = viewMatrix * pos4f;\ + }else {\ + pos4f = modelViewMatrix * pos4f;\ + } + +#endif +#endif diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/light_point_mesh.dat b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_point_mesh.dat new file mode 100644 index 0000000..0ff3f49 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_point_mesh.dat differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh new file mode 100644 index 0000000..ee2a1c3 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/light_shafts_sample.fsh @@ -0,0 +1,158 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 = 1.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 -= SAMPLES_PER_STEP_1 - 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 -= SAMPLES_PER_STEP_1 - 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 -= SAMPLES_PER_STEP_1 - 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 -= SAMPLES_PER_STEP_1 - 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 -= SAMPLES_PER_STEP_1 - 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 -= SAMPLES_PER_STEP_1 - 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 -= SAMPLES_PER_STEP_1 - 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 -= SAMPLES_PER_STEP_1 - 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 new file mode 100644 index 0000000..1ee1c2f --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_mesh.vsh @@ -0,0 +1,27 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..b3b15ac --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_point.fsh @@ -0,0 +1,86 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..d74cb59 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/lighting_sun.fsh @@ -0,0 +1,100 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..1c4f7a2 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/material_block_constants.csv @@ -0,0 +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 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv new file mode 100644 index 0000000..80c2dbb --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/metals.csv @@ -0,0 +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 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh new file mode 100644 index 0000000..f2c234b --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.fsh @@ -0,0 +1,50 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..015bceb --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/moon_render.vsh @@ -0,0 +1,35 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..8382136 Binary files /dev/null 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 new file mode 100644 index 0000000..203ac6d --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_blur.fsh @@ -0,0 +1,48 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..e187942 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_bloom_bright.fsh @@ -0,0 +1,48 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..473e3cf --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_avg.fsh @@ -0,0 +1,44 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..0f250c0 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_exposure_final.fsh @@ -0,0 +1,40 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..7abf36e --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_fxaa.fsh @@ -0,0 +1,273 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +/* + * 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 new file mode 100644 index 0000000..d2d6922 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_distort.fsh @@ -0,0 +1,38 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..80a949a --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.fsh @@ -0,0 +1,34 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..65584f9 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_ghosts.vsh @@ -0,0 +1,65 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 * (3.0 - 2.0 * valueOut) * 2.0 - 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 new file mode 100644 index 0000000..2eeeb63 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.fsh @@ -0,0 +1,34 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..2436095 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_lens_streaks.vsh @@ -0,0 +1,40 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..27798fe --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/post_tonemap.fsh @@ -0,0 +1,55 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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.1 + min(lumaHDR * 6.0, 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 new file mode 100644 index 0000000..fe8d59c Binary files /dev/null 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 new file mode 100644 index 0000000..e914e71 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_control.fsh @@ -0,0 +1,194 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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; + 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 new file mode 100644 index 0000000..bf50e7a --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.fsh @@ -0,0 +1,40 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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, +#else + output4f = vec4(0.0, 1.0, 0.0, +#endif +#ifdef COMPILE_LIGHTMAP_ATTRIB + v_lightmap2f.y * v_lightmap2f.y * 0.99 + 0.01); +#else + u_textureCoords02.y * u_textureCoords02.y * 0.99 + 0.01); +#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 new file mode 100644 index 0000000..ffb9427 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_mask.vsh @@ -0,0 +1,44 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..324756b --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.bmp @@ -0,0 +1 @@ +_[_]a_gaqa|b†cŽf“j”p’w‡†}q—ežZ¡S PšQ‘U…\xcngihggjfpexf‚iŒn•v››•™Š¡~¦s¥lŸi•kˆq||sˆo“mšmœp™u’{‡zˆmŒb^Š^„\|[tZmYfYbY_[_]a_gajtpnslwo|t€z„‡‚‡‚„€z{qvhr_qVqQrNtPvTw[wdukqpout~|ˆ†’™—œ™š“‘Š‡€z{uxrvpuptqrrnqgobjbdfan`vaf†nŠwŠ„‰{Žq‘i‘cŽa‰aƒe{jtpnslwomkonqpvrqˆo‘n–m™o˜r”wŽ~††|o™d¡[¥V¥U Y—a‹jsvwpwmtmqomtk{k‚nˆt~‹ˆ˜~£t©jªd¥b›elwwƒqn—mœoœs˜x†„|ˆs‰p†on|lvkrjoimjmkonqpvrkzruvtzx„‡ˆ‹‘‹’ˆ„‰~€xuskqbq[sXuXw\yczjyqvutyxŠ‡’˜”›—š––‘‡‡~yywvwuzv|w~yz|yuvnongqaw]~^…b‹is‹~„‡yn‘e’_^`‡e€kzruvtzxyz|}€€„€‹~’y˜u›q›o—p‘rˆx€€vŠj•`ŸZ¥X§Z¤ak“v‰€€„yƒtqzpurquoyp}v€€{›r§i¯a°\¬\£`—hŠs€€yŒt–qœpŸržu™y’}‰‚€€}z~w|uztytxvyyz|}€€„€sƒ{€€€ƒ„ˆ‹“’š”ž“ž‘›Œ”†Š€€{uylyezb}bf‚mƒuƒ|€€~ƒ€‰…‹•™“™“–‘‰‰€€wxsuttwu|y}†ˆƒ†ƒ€€ywwnye}_‚]‡^‹d‹mˆw€€t‡jŒb^_cŒj‡sƒ{€€€ƒ„ƒ†ˆˆŒŠ‘Š–†š€œz›t—om‡n}styk„aZœV¥W©\ªe¥qž}•†ŒŠ…‰~…yuystsrtsvyw‚vržjªb²[´W±X©\ep†|€ˆy’ušržqŸrs˜u’wv‹u‹sŠrˆs‡u†y…~…ƒ†ˆˆŒŠ‘Š€ŠŽŽ’’—˜›žŸ£ ¦ ¥ ˜™“…ˆ{‡r‡mˆjŠlqx€ˆ‹Œˆ‰”Œ˜Ž›œ™Ž“‰‹wwoplnnpstzz‚ˆ‡ŒŒŒŽ†Š‚}w}ld‚_„^…a„h€pwym€e‡a`‘d“k“u’€ŠŽŽ’’”‘™’œŸ‹ …ž}™v‘r†ozoosfy_ƒYTœS§V®]±g¯rª~¢‡š‹’‰Š„ƒ~}xysvrustytƒsožh©a±[³X°X¨\c‘mˆw‚|Šw’t—ršršr˜s–t“t“r”q”r”t“y“~’…‘”‘™’œ‘Ÿ›ž ž£ ¦¤©§«©¬©«¦© ¤™ ›‡˜~—w˜s™r›tœy€œ‰™‘•–‘™žŽ¡¢‹ ˆ›„’}‡u{kqdjcifllsu|~…‡Ž”–‹“…Š~€sjdb}dziupmwfa‡aŽe•mšx„ž‘Ÿ›ž ž£ ”˜œ–¢•¦“§¥†Ÿ–yŠu|sntbw[|V…R‘PžQªV³]·g¸r´}®„¦‡ž„•Œy…so{nxqwwvuŽq›k¦e¬`®]ª]¢_˜dk†rz|y‡vŒut’t”u”v•u—tšsœtžwž|žƒœ‹š”˜œ–¢•¦“¡¬«¬°¬±¬³¬´¬´ª´§³¢°›­”ª§†¥€¦{¨xªw«y«©†¦¡—›œ•¡‘¦Œ©ˆ©ƒ¦}žw“p†hx`lZfYf]kdsm}xˆ‚“ŠšŽ™ˆ…„‚xo|iyguipmjtdz__‰c’k›w¢…§“ª¡¬«¬°¬±¬–Ÿ˜§•«‘«Œ¦…ž’{ƒxsxezY}SPˆO“P S¬Xµ`»h½q»y¶®€¦}œw“q‹l…i€j}m|u{y‹v—r m¥i¦f¢eše‘g‡ko~s{vyzx~x‚x†y‹zz“z˜xx¢x¥z§§…¥¢–Ÿ˜§•«‘­¶¶¶ºµº²º¯¹ª¸¥¶Ÿ´™³“±°ˆ¯„°€²}µ{·{¸}·‚³ˆ­¦˜žŸ—¥«‡¯€°y¬r£k–d‡^xWkReReUj\sfq‹|•…‹ ›Š‘‡†ƒ{~synsmmogtbz]\…`h–t ‚¨‘¯ ³­¶¶¶ºµº²•Ÿž˜§’¬«‡¥‚›~Ž{~{n}_€TƒP†PŒR–U¡Y¬^µd¼j¾p½v¸y±y¨uŸo–ie‰c…d‚ir}ˆ}“zšwžtq˜o‘nˆm€m{mzmzmzmzo{s}x~~†€Ž€•~œ}¤|ª|­®„¬Œ¦•Ÿž˜§’¬´º»º¾·¼³º¬·¤´›±“°¯‡¯ƒ¯±´€¹~¾}Á}Á~¿‚¹‡°Ž§–”¦Š®€´wµn±g¨a›\‹WzRmOfNfQkWu_€iŒt–~‡ŸŠšŠˆ…„|~uwrpsivb{][…]‰d‘oš}£Œ¬›³©¸´º»º¾·¼³Ÿ™•¢¨†¨€¢|˜zŠz{}k€^…U‰S‹VZ–^ cªg²k¸nºq¹sµt®s¥nœg”aŽ^Š]‡`†f†o†z…†„‚”—•}{ˆx€uyqvnwjye{a}ac‚hƒq…{†††„™£~¬}±}³°‡©Ÿ™•¢¨†µ¸¹·º³·¬³£®˜©¦„¤~¤z¦y©z­}³»Á~Æ}Æ~»ƒ°‰¤™˜Ž£‚­wµm¹e¶_®[¡XVSpQiOhPmTvZcŒm•w›œ‡–Š‹‰…zuwtovg{`\‡\Šak“x›†¤”¬¡²­·µ¸¹·º³·¬†ž‘š†¡¢yv”vˆxz|l‚aˆZ[Ž`f•ko¥r¬t°t²s±r¬q¥oœi•bŽ\ŠX‡X‡\ˆd‰n‹yŠ„‰Œ‰Š‘ŠŽ‰‰†ƒz}twsqvhy_}X€TƒU†Zˆc‰pŠ~Š‰ˆ•„¡¬{³yµz²ª†ž‘š†¡°±±®¯ª«¡¥•Ÿˆ™|•s”n•m™ožt¥{­·ÀÅ}Æ|Â|¹~¬‚žˆ’‘†yªnµd»]ºZ³X§Y–Z„ZuWmUlTpUxX^Šg’p—z—ƒˆ„‰{†u€sytqxi~c…`‹bju“‚š¢›¨¤­«°°±±®¯ª«¡|œ…Ž˜xšr—pp†t{zp‚hˆdgnu‘{—~€¢¦|§x¥t q™ng‰_„Y‚VVƒ[†c‰nŒyŒƒ‹‹ŽŽ’‹’…‘~w†s~suwj{]RƒK†I‰NŠX‹f‹vŒƒŠ„Ÿ}«w´s·r³uª|œ…Ž˜x¦¥£¢ ››‘”„Œv…kc`ƒb‰hp˜y¢¯¹€Á}Âz¾xµw§z—Š‰}—p¦e³]¼Y½X¸Z¬^œbŠd{cr_p[sYyY\‰ck’u€ˆ‡}‰uˆpƒo|rtwmh†gŒkt€‘Œ––œŸ¡¤¥¦¦¦¥£¢ ››‘qœzŒ†~t“n’kŽl‡pww~q…p‰t‰|ˆ„ŠŠŽ“Ž—‹š†š€˜z“v‹qƒj}ay[xWyX|\e…oˆ{‰…‰Œ’Ž–‹˜…˜•yŽu…wz{m€]ƒO‡F‰CŠGŠQ‰`‰p‰†€x«pµk¸i´kªqœzŒ†~t™˜““Œ‰tyfr\nVnVqZxdo‹{–‚¤„±‚º~¼y¹u¯s¡t‘xƒ‚v‘j¢`±Z¼X¿[»`°g nŽrpvkseu`z]€^‡bŒiŽs‹~‚‡w‹oŠj‡jmztt{pƒpˆv‰€ˆ‹‹•œ“ —¡™žš™˜““Œ‰jŸtŽ€€‰uŽnjj‰lƒq~wz}z€€€ˆ~‘€—„šˆšŒ—Ž‘ŽŠŒ„‡€€{wrqinbm^n]rawi|t€€Š€†””“‘˜Œš†˜“~‹€€„q‡`‰QŠG‰D‡G…Q‚`€q€€}ŽwŸo®g¸c»a·d­jŸtŽ€€‰uŒ…‡€€zurhi\cS_P`RdZleus€€Œ‡›ˆ©†³·{µu¬ržrŽv€€sh¡_±\»\¿a»i±r¡{€€~vxspuizd€c†eŠkŒt‰€€‰tŽkŽf‹e‡hm|ty{y€€Š~“›„Ÿˆ ŒœŽ–ŽŒ…‡€€zud¤n•z‡…|‹sŽlihŠj†m„p…rŠq“o›r w¤|¤ …›†”…Ž€‰y„q|ksgkfggfjjnqs{v†vx–~™†™—–“›Žœ‰˜†‘ˆ‡‹yhŒY‰N…J€LzUucqrq€oi b¯]¹Y¾Y»]²d¤n•z‡…|€„w€qyloed^ZYTWSYW^`fnp|y‰…”‘¢Ž«‰°‚®|¦wšv‹y}‚q‘g¡`°^¹`¼g¸p­{ž„‰~‡vszurzm€k…l‰qŠy‡„~r’h“b’_Ž`‰d…iƒo„sŠs“sšužzŸ›ƒ•…‹†€„w€qylo]«gs~„‡yp‘i’e’c‘b‘b’b–`_£b¨iªp©w¦} ™“~Žw‰o‚izesdpephslzp‚sŒs”t™{›„›™˜•ž¡Œ Š›‹’…Œtˆe‚Y{SsSkYecap`}_Š[›V«Q·O½P½U¶]«gs~„p€f}`w]oXfU^S[S\Wb]lfzo‰w•œŽ™›¡•¤Ž¢‡›~‚€v‡l“d¡_¬^³bµi°s¦~™‡ŠŒ}‹v†u€w{|wu…vˆz‡‚Šy’m—b™[˜W–V“Y‘^c‘h–iœj mŸs›x”}‰€}p€f}`w]oV°a¤l˜xŒƒ€t”j™b›]œYœVT Q¥P©U¬]­g«q§y¡~š”xŠpƒj~gyfwgyj|nƒrŠt‘t–u™{š…™—š“¢Ž§‹¨‰¥‰žŠ‘‡€rxeo]eZ]\VcRmRwRƒO“K£H±G¹I¼N¸V°a¤l˜xŒa€W}RyQsPlPgQfUh[obzj‡r•y¡€¨ˆª§•¢—›””ƒˆxˆnŒf•`ž]¦^ªb©j¥sœ}‘††‹|‹xˆx…{‚€€„††„ƒ‰}s–gš\œSNLœN›S›Y_¡b¤d£ižo•uŠ{|~n€a€W}RyQsR³\©gžt’…x˜lŸa¤Y¦S¦N¦J¦G¨FªL«V«a¨m¤wž˜ƒ‘‚Œ|‡tƒnk}j~l€o…sŠvy”x–x—~–‡”’‘œ¥Š«‡®…¬…¦„›w~mqcgYaQ`KdHiIpJ{HŠEšC¨C³E¸J¸R³\©gžt’UL€I}JyLuPrUr\uc|j†q’xŸ|©°„³‡²‰®ˆ¨„ ™w’og‘b•^š\œ^b›i–rz‰‚†|ˆ{ˆ}ˆˆ…ˆˆ‰‰‹†x”n˜b›VLŸF¡D¢F£K¤S¥Z¨_¨c£i™pv{paUL€I}JyQ²Z«e¡r•ˆzœm¥b«Y­Q¬KªG¨C§C§I¦T¥`¢mžy™“††‡€‚ys~qp‚r†u‹y}”•~”}’‚‰Œ“‰œ†¥ƒ¬¯€¯«}¢v•m‡c{XpPiIeEeDgFkHsGE‘DŸD«E²JµQ²Z«e¡r•M„GƒF‚IOV}^~go‡v{™¤€­€´€¸¹}·z²v«q£l›g•c“`”^“^‘`ŽcŠi‡oƒv|}€|ƒ~†ƒŠ‰’”ˆ•€–u–j—^™R›Gž@¡>¤@§F¨OªYª`§fžm’tƒzte‚W„M„GƒF‚IS®[©e s•ƒˆ“{¡o«d°[±T¯OªK¥G¢GŸMW›d™q–}’…Š‡Š…}}{x}v€v…xŠ|€“ƒ•…“„‚Š…†‹ƒ’€š~¢|¨{¬{­zªv£n™dŽ[‚RxKpFkEhFgJiMnMzLˆJ–I¢J«M¯S®[©e s•K‡H‡J‡OˆX‡b‡lˆv‹}ƒ•…œ†¤„¬³|¸w»r»n¸j²g©d c™b”aaŠb„c~fyjvnusvwyz}~‚„Š‹‘‘–––™“›Œš˜u•i“]”P–Eš>ž;¢>¦E¨P©[¨e¡l–tˆ{x€i„\†R‡K‡H‡J‡OˆY§`£i›w‡…˜z¥p¯h³a²\­X¥UžQ˜Q”V’`lŽwŒ‚ŠŠ‡Ž‚Ž|ˆxw|zz€{†}Œ‘…”‰”Šˆˆ†‚‡|Šyw•v›v¡w¥w¦u¤pŸh˜_V‡OKwIqKmOjTiXmXvW‚USšS¢T§Y§`£i›wO‰P‰TŠ[eŽqŽ}†Œ’•™ŒŸ‡¥€¬x³p¸i»d¹a´`­a£c™e’fŠh€iujmkhlfnhpnsvv}{†ƒ‘Œš”Ÿ›Ÿž›Ÿ‘…˜w’k_ŒRŽF’>—<œ? G£S¤` l˜u‹}|ƒnˆaŠW‹QŠO‰P‰TŠ[aŸg›o“}‰€wªq²l´h°f¨ežc”`Œ_ˆd…l„u„„ˆ„Ž‚y‰t‚u~y|}‡ƒ‘ˆ“‹‘ŒŠŠ€‡y†s‡p‰op‘r–t™v›tšn—f“]ŽV‰QƒO}QxUt[pcmgnhufc‰`“^š^žaŸg›o“}‰W‰\ˆb‹jv‘ƒ‘Ž‘–šš–’•ˆš¡tªj±b¶]·[³]¬a¢f—ko‚qurhr^rXqXq^qgrst~zŠƒ—Ž¡—§ž¨¡£¡™œ‹•|Œp†dƒV…JˆB?“B˜K›X›g–uŒ~‡pŒdŽ[UT‹W‰\ˆb‹jj•o‘w‰…€”y£t®q´p³p­q¢s•s‰q€o{szxz|†~Œy†uu{zz€{‡~‚‘†‘‰Š„ˆy„ql€jkƒn†r‰vŒxwqŒiŠa‰[‡W…Xƒ[b|jxruwtxyu€q‡mŽj“i–j•o‘w‰…€a†j„rˆ{Œ‡“œŽ¢Œ£‰ ˆ™‡ˆ†Œ{”pže§]®Z°Z®^¨ežm’u‡yz|j}\}Q{LyNwVubuqw}‡œ’¨›¯¡°£«¡¡š’‘ƒ†w~kz]{P~GƒD‰GŽP‘^nŠ|‡rŽf’\“W‘WZ‰a†j„rˆ{Œswˆ€€Œw›r¨p±p´r±v¨{›€€w~ss‚u†zŠƒ†‹…‡€€zx{t~s„t‰vŽz~‰‚€€u{mxivivlwqyw|}~€€€yq€i‚d„a†b‡g†n…wƒ€€„~…‚…}ŠyŽusswˆ€€Œwk~w|€€ˆ…“‡ž‡¥…¨‚¦ }–{Š|€€u‡j’aœ[¤Y§\¦c m—w‹€€„r‡b‰TˆI†E„HR`~p€€†Žž˜« ´¤¶¤²Ÿ¨—š‹Œ€€wssesWvM{I€K…T‡a†q€€uŠi‘_“Y“WZ‰aƒk~w|€€ˆ…|‰€‚ˆz”s¡o¬o³q´v¯|¥ƒ˜ˆ‰‹|‰t‡q†r‡vˆ|ˆ‚ˆˆ…ŒŒ{ˆsƒl‚i„g‡i‹lpuŠx„zzwpskojmlkrkzlƒnŠoqŽp‡qtwxp}mƒm‡qŠwŒ‹‡‰Œ‡Œˆ‰‹…~||‰€‚ˆz”ssx~u‡x}˜~ }¥{¥w¡s˜pŒn€nurkza…ZW™Yž^h™t…‡yŒl\’O’E‘BEŽOŒ]Œn}’‹š›¡ª¦´¨¸¥¶ž¯“£‡–{‹rmpmapUtOyO~Ua€oz}pˆfŽ^YZŠ_„g}sx~u‡x}‡†Š€‘yšs¥q­s²w±}¬„¢Š–ˆ‘}v‹s‰t‡x…~‚„~Šztmeˆ^‡[ˆ\ˆ_‰c‰i†o‚t{wrukpikkgqc{a…__™_ž``—aŽf…l~ty|wƒyˆ~Œ„ŽŠŽ‹ŒŽ‹ˆ†Ž…‹‡†Š€‘yšswvt‰vz—ywŸrl—gb€_s_hb^kWwR„QŽU•]–i“u‹€ŠuŽh“Y–K™Bš?›CšLšYšh›vžƒ¤“¨£«¯ª¶¥¸´‘­„£w™nŽi~hnj`nWtTyV}_}jywp‚hˆb‹_‹`‡e‚m|wvt‰vz†”€˜{Ÿw¦w«{­€¬†§ŒŸ‘””‰•€‘{Œyˆyƒ|€z…tŠng‘_XŒRŠP‰RˆW†^ƒf~nytrxjwfrglnex_„Y‘UžS§Q¬Q«Q¤T›Y’a‰jƒs€|€ƒ‚‰…ŒŠŒŒŽŽŽŽŽŽŽŠ†”€˜{Ÿwzy‚w‡yz’x•s–k“c‹\VtRgR\US_MlJzL†QŽ[‘gtˆ€~ˆsŒf’W—KœB ?£B¥J¥U¦c¦n§zª‰­˜®¦«°¥µ›¶³‚­u¦lœfŒd{eki_oYvX{\}e{puzn‚j†h‡h†l‚r~zy‚w‡yz˜†š‚ ~£€¥„¦Š¤ “š–“—Œ•†Š„~~wq„kˆdŒ]ŽVŽNIŒIŠL†R‚[}ewopwj|d|cwhorf^ŽVœO©J²H¶G´H­K¤Q›Y’b‹l†u„}„ƒ…‡‡‰ˆ‰Š‹ŒŒŽŒ’‹•‰˜†š‚ ~{€|ƒ}†}ŠyŒq‹gˆ]€TvMjI^HTLLVGeEtH‚O‹YeŽrˆ}~ƒs‡fX•LœD£A¨C¬I­S­^¬g¬p­~®Œ­šª¦£¯š´µ‚´u°k§d˜a†auegk^sYzZ`j{tw|t‚r†r†t…w‚{€|ƒ}†}œ†ž…žƒž…‰œ›”™˜–›“š˜“‹Œˆ……~ƒwpj‚d„^†X‰QŒKFŒF‰K…R\xgqrj{da‚c}ltxj‡`—V¥M°G·DºC·E°I§OŸV–^gŠo†v„|ƒ‚„ƒ……‡ˆ‰ŒŠŠ•‰™ˆœ†ž…žƒž…|…}ƒ~ƒ‚{‚q‚e~ZxPoIeEZEQJITEcDtG‚NŒX‘doŠy€}thˆ[PšH¢E©G®L°T°\­b«iªsª€©¦š ¥™­Ž²ƒ´w´k­cŸ^^~anhcq\zZ^„f‚py€~†}‰|‰|ˆ|…}ƒ~ƒ‚†ž‡œˆ˜‹“’˜Œ‹ Š ‹Œ—Ž‡Šw†p‚je~`~\€XƒS‡M‹I‹JˆNƒV}`ukmvg€b†aˆgƒrz€odžYªP³J¸F¸F³I¬M¥RX–^e‹k‡pƒv€z}~|~ƒƒ…‰†‡•‡š††ž‡œˆ˜‹}Œz‰x‰x…y}zrzfxZsQmJeG\HSMLXHhHxK‡Q‘Z–d•mŽuƒxwzk_‹U•OŸL§N­R¯X®^©a¥e£l£u¢ œ˜—¢ª…¯y±m­c¡]“[ƒ^tehn`y\ƒ^ˆe‰nŠxŠ‰ˆ‡Œ„ŽŽ}Œz‰x‰x…›…›‡–Š‡˜ }¥{§}¥Ÿ†–Œ‹xŒq‡k‚f}cyax_y]}ZƒVˆRŠRˆVƒ]|ftpm{g„dŠeŒm‡z‰t—i£_¬W²Q³O°OªS£W\—_’cŽfŠj†m‚q~uyyw}y€~‚…ƒŒ„“„˜„›…›‡–Š‘yŽuŒsˆtusugu\sToOjNcQ[VTbPqO‚RW™^f›m“rˆt{vo|d†\‘W›U¢V§Z©_¦c dšd˜g˜m˜u˜—Š””ž‡¥|©o§dž\’Y…Zxalkdx`ƒa‹gp’z“„“‹‘Œ“†“‘yŽuŒsˆ—ƒ•†ŽŠ„’zœr¥mªl¬o¨v ~•‡‰Ž}tŒm†hfyeterfsgwfc†_‰^ˆ`„e}mvup~k†i‹mŒv‰ƒ‘xžn§f¬_­[©[£]œb–f‘iŽkŒkŠlˆl†m‚o~rxwt|uz€‰•—ƒ•†ŽŠ„’ƒ“ztq‡r~ssuiw`wZvXrYm]fd_o[~ZŽ[›_£d¥j¡p˜sŒs~tsziƒc_–_a e iœk”kh‹gŒiŽms’{’…‰—~œqœd—[ŽV„Wz]qgjtgg‹m‘u–šˆ›˜•“—‹–ƒ“ztq‡’~Ž†‡z‘nœd¦^¬^®bªj¢u–€ˆ‰|‹sˆl‚i{hujpmnqottu}r†mŠkŠl†nr{xu~q„qˆv‰€†€™x£q¨k©g¦fžh•lr‡v„x„x„v†t†r†q„q€syxt~u€y€†}‘}’~Ž†‡z‘ˆ’~w‰tƒt{vryi|c~`a~ezktsm~hŒg›g¦j¬m¬r¦uœxŽv€vu{mƒh‹f’g—k™o—t’vˆtok€h„hˆjowŽŠ‡€rdŒY‡SRzWtbpon}p‡u}—†œŽŸ”ž˜™˜‘–ˆ’~w‰tƒw‰z€€sŠe–[¢TªS®W¬`¤k™wŒ€€‚v€q|nvoqrnwm|o€v‚€€‰{wŽt‹s‡tv}yy|z€€Š}–y t¦p¨m¦mžo”s‰y€€z„z†{„‚ƒ~‡{‰y‰x†z€€z…y†|…‚‡~‹zŽxw‰z€€sŠ‹‡„€€|{|sl‚g…dˆeŠh‰o†w€€yŠt˜s¥s®u²x°|©œŽ€€uƒnˆjŽj“n•s•y‘Š‚€€xyvrxl}hƒgˆhŒms‰z€€q‚c‚V€O}MzQwZvgwuz€€ˆ‡’Žš”Ÿ˜ ™ž–˜‘‹‡„€€|{Œr‡s~xq‚dXœQ¦N«Q«X¦al’t†w~vysxpzn}nƒp‰uŽ}‡Žˆ•ƒ–~“yvŠt…ssr†rpšm¢k¦j¥l o—t‹{‚u‰ppsŽyŒ‰††‹„„Œ††Š€Ž‚‹††ŠzŽuŒr‡s~xq‚™ƒ’{‹v‡r‡mˆh‹eŽei‘oxŽ‚ˆ‹‚•~¡|¬}³€µƒ±ˆ§‹˜ˆŒz‹pŽj’i–k˜q˜y•ˆ‡Œ}Šuƒszuqyid„bˆc‰g…l}qot`uTvLvIvLwSy_|kt‡}ˆ““—›˜ –¡’ž‹™ƒ’{‹v‡rrŠrvuhŠ]–TŸP¥P§T¤[žb–hk†kƒjƒk†l‹p‘u˜}‡Ÿ’ž›™Ÿ’ ‹ƒ˜|’uŒo‡k†gŠe‘c™bŸb¡eŸj˜pŽytŠje“e•h”o“w‘†‹Œ‘ˆ•„—„–†‘ŠŠŽƒ|‘vrŠrvu ~›w•soŽlŽiŽhj’p“x“‚‘–ˆ …«„³…¸ˆ¶®‘¢•‘˜€˜q˜h›ežf k¡sŸ}š‡“‰“‘w‰t~trwg{_Z‚XƒX€[y`mc`fUiMlJoKsPwX}b‚iˆrŽ}’Š•••’¢Œ£… ~›w•so”vu‡w|~p‡e\˜VT UŸXœ]—`‘aaŒcŽe’j˜qŸ{¥†ª’­¬¥¨©¡©˜¦Ž¡„™y’o‹fˆ_ŠZX•Y™[ša—ir…|y†lb“\•Z—]—c—l—u—~˜…˜‰š‡„†š‰•ŽŽ’†•–y”vu‡w|~¦{£vs–q’omnqŽw€‹–Ž ‹©Š³Š¹‹º¶“«—œœ‰Ÿw¡i¢a¦_©b«jªt§¡‹˜“Ž˜„•|ŒwuqudwYyQ{L{KzMuPlTcXZ]SbPgOmRtVz\€a†gŠsŽ€Ž™Œ¡‡¥¦{£vs–q™{•zŽ{„z„pŠha“]–[—Z—[•[“Z’Z”\—aœh¢s©®³š¶¥¶­³±­±¤®š¨Ÿ€–rŽfˆ[‡TŠRŽS‘W‘_Žhˆts‰g‘]”V”S•T–X˜`šjœt}Ÿƒ ƒ¡ƒŸ†›Œ–‘–‰™ƒš~™{•zŽ{„¨{¦x w˜v‘t‹t‡t…x†~ˆ†Š›¥Œ¯Œ·¼Ž»‘´•¨š–žƒ£p¦a©[­[±`³i²u®§ž•”™Š–‚‹|}wnt_sSsJsDtBtCrFmIhNbT^Z[aYhXoYvZ|[`„k†x‡†‡”…ž‚¥~¨{¦x w˜v™€“€Œ€„|ƒu…n‡iŠdŒa^‘[“X•W™X^£g©s®³‘¶Ÿ¹ªº°¸´´µ­²£¬–£ˆ™yj‡]ƒT„P†QˆV‰_‡j‚v{q‹g‘\‘TNM’O•U™^œi s¢|¢¡†™“”Ž™Š†žƒ™€“€Œ€§{¦{ |–}Œ|ƒ{}{z}z‚}‰’†œŠ§‹°Œ¸¼º‘²”¤˜’œ~¡k¦]«X±Y¶`¹j¸v³ƒ¬Ž¢•˜˜“ˆˆyxjr[nOmFmAn?p@pBpEoJnPlVj^gedl`r]wZ{]}e~r€~Ž~š}£|§{¦{ |–}ž‡›†–…‘‚Œ~‡{‚z|zw|q€k…e‹_Z•V›W [¦dªq®€±³Ÿµ©¶¯·´¶µ²³ª®Ÿ¥‘›‚r…cX~S~T€Ybmxzƒs‹j`V‰N‰IŒIM•Uš_žk¡u¡{—†’ŽŽ•‹›ˆŸ‡ ‡ž‡›†–…‘‚£|¢›‚ƒƒ‚xp€llƒp‰w™…£‰­‹µŒ¹·Ž°¢’–}›j¡]©Y±[·bºmºy¶„®Ž¥“›”“Ž‹‚‚txepXjNgFgCiBmCqEuHyL|Q}X|^yesjlpds^u]vdvov|w‰w•xžz£|¢›‚ƒ‹š‹–ˆ“‚‘{tnŠl…nrwzoƒfŒ_“YšW Z¥b¨m©|ªŒªšª£¬©°®²±±±®­¦¥š›Œ|„m{ax[x[z_|g~q~{}„xŠqŒg‡[‚QI„F‰GM•Wšdœoœw–~†‰†—…œ…Ÿ‡Ÿ‰‹š‹–ˆ“‚}œ‚”‡‡‰xˆk…aƒ]]‚c…mŠw’œ†§‰¯‰´‰´ˆ­ˆ¡Š‘Œ‘n™b£^­`´h¹q¹|µ†®¤‘›”ˆŒ|‚nwamWfObKcJfKlNsP{Q„U‹Y^cŒh„lzooqerbrfqnpyp…rt˜x}œ‚”‡‡‰™Œ–’Š‘“v•k–c•_’`Œf„oz{p‡f^˜YY¡_¡h uŸ„‘œ™žŸ£¥©ª­¬®ªª¤¢›—ˆ„yzltesdvgzn}v€~…‰z‰p‚c{VyL|FEˆJS”`–m”v~…ˆ}—~œ€„œ‰™Œ–’Š‘–|”ƒ‹‰}ŒmŠ^‡TƒOQ}X~drˆ}’„‡¨‡®…°‚¬€¢€”‚„†uj›f¦i¯o´xµ±ˆª¡Ž—‹‘‚Švjs_iWbS^R`TeXm]w_‚`bše¡h£lŸn–q‰r{roripjnplxl‚n‹q’v–|”ƒ‹‰}Œ“ŠŽ‹‹‡‹}p•c™Y›TšU–\g…uy‚mc•[™Y›[™b–m’yŽ…ŒŒŽ“•šž¡¦¦«¦¬£¨œŸ‘“……zxtpsmvpzu€|„‚‡‡‡‰ƒ‡ykv]tPwH|F‚J‰SŽ`ny…‚{‹v’t˜všzš€—…“ŠŽ‹‹‡‹}y€„‡uŠd‰T„JFzIwRv_xo~|‡„”† …¨‚­~«z¥xšxŒ|~…t’qžs¨y­€®†«Œ£ŽšˆŠƒsyhm_d[]Y\\^aehpm{p‰q™r¦t¯v²w¯x¥y–x†wxvqsppsmykkˆnsy€„‡uŠ‰ƒƒ„€€u‡gZ–Q›MœOšV”b‹q€€s‹f’]•W•W’[d†ny~€€†ˆ“˜ž ¦£ª£©ž£•™ŠŒ€€ywwtzv{„€‰†ŠŒ‰ˆ€€qwbtVvNzK€O†YŠfŒt‰€€ˆuo–n™o™s–y~‰ƒƒ„€€uŒs‰y€€pƒ_Q}GxDsHoRnapqv€€‡Œ‰š‡¥‚«}­w©s¡s•v‰€€Œ|˜~¢‚¦ˆ§¢‘š’†Š€€ytpjfc^`YaYf^mgvs}€€Ž€Ÿ®‚¸ƒ»„¸„®„ŸƒŽ€€w|uwwr|m‚k‡k‹nŒs‰y€€pƒ}y}vyxobˆW‘O˜LœOœX˜e‘t†‚yŒl’a”Z“WY†_~hwqswt}|‡ˆ‘”šžŸ¥¡¦ž¢—šŽ„ƒ~z|w~x‚|‡‚Œ‡Ž‹ŽŠŠ‚tzfw[yU}TƒYˆcŒqŒ€‰‹€“v™pmœn™q’uŠy}y}vyxo‰j„n{tmw]vOsGoDkIiTjdmtt‚}ŠŠ‹˜‰£ƒ«}®v¬q¥p›r{ˆ‡…’‡™‹œ•–˜™‚–xq…kycp\iWgViYoawl€zˆ‡‹•Œ¥³½‘À’¼“²“¤’”†~Š{ƒ|{tƒn‡j‰i‰j„n{tmw||t|qwtn|c†Z‘TšS W¡`Ÿm™{ˆ„‘w–l–d“_Œ_‚bxhooitizp‚|Œ‰””™œ› šž”˜„ƒz}vv‚y†~‰ƒ‹ˆ‹Šˆ‰€‚u|j{a}]‚_ˆeq‘Ž™… {¤u¥r¢r›t’w‡z||t|qwtn‚d|eshfkXjLhEfDeIfTicosw€€‡Œ‰˜†¢ª{¬tªo¥lœm“tŒ~Š‡’˜‡ }¡rh–aŒ\€VvRoQmTo\tg}u†„‘“ž•­™¹œÁ Ã¢¿¤¶¤©£š¡ŽŸ‡šƒ’ƒ‡ƒ|„s…k„f‚d|eshfk{s~pztr}iˆa“]^¤c§l¦x¢…š—…›z™q”lŒjkvnkrduazg€q‡}‰‘’“˜’˜Ž”ˆŒ‚}x|r}qr‚v„{†€…„ƒ…}u~m~hƒg‰jr”~—Œ—š”¦Œ¬ƒ®}¬z§yz’|†~{s~pztryar^i_^`R`I_C`CbHfSl`so|{†‚„™ƒ¡¦y¨r¥m i™i‘mŒuŒ|‘€˜Ÿ~¥x¨o¨e¤[T’O†K|JtMpTq_vn‰’œ˜§œ³¡½§Ã¬Ä°À³·´¬³Ÿ±–®¨ŒžŠ’ˆ††yƒofyar^i_^`{…tƒrwxqŒl—j k§p«y«„¨¢—š‘žˆœ€—zŽwƒvwvkxbz]|`€i„t‡‰‰‰ˆ‘…‰}zuymyizi|l}q~w~}}€z€uq‚oˆpu–~›‰ž—¤š®“´‹µ†±ƒ©‚Ÿ‚“ƒ†„{…tƒrwxraj\bZYZOYHYD[D`IgRo^yjƒuŒ{”~šŸ|¡x rm˜h’fŒhŠmŒq“tœt¥q«l¯d®[ªR¢K—G‹DEvKqUpcuu}‡ˆ˜’¤™®Ÿ·§½¯Á¶À»¼¿´¿«¾¢»›·˜±”§‘›ŒŽ‡€tziraj\bZYZ}Šw‰w…}†zwšv£x©}¬…¬ª–§œ¡ ›¡”žŽ™ˆ‘„†z€n€d€^€^€dmw€ˆ~‹|‹z†x|wqvhvbv_v`vewlwtw{v~u€t†uŽx–~œ†¡‘£œ¢¨ž±˜¶’¶Ž²‹©ŠŸŠ“Š‡‹}Šw‰w…}led^]ZWWPUJVGYG`LhSs]g‰o‘v—zš|›|šy—u’pŽj‰f†e…gŠi“jžj¨h°d³^²W­O¥IšDB€DuKnWlgpyxŒ‚Ž©–°ž¶©¹³º¼¸Â´Å­Æ§Ã¡¿žº´š«– “‰‡€zvoled^]ZWW{}Šƒ…Œ‚•€£ƒ§ˆªŽª”¨š¦ž¤Ÿ  œŸ˜›””‹Œ‰u‡j†b„_c~jzrx{u‚t†s†tƒtzuntcsZrVqVpZpbqlrut|vxŠ{“›…¢Œ¥”¦¤¦ ¯š³–³’®‘¦œ‘‡{}Šƒ…kmbd\^XYTVPVNYN`QjVv]ƒeŽl•r—w—{•}‘}Œz‡u‚oj~f€e‡d“eŸeªd²aµ^´Y®S¤L™GŒE}HqOh[ejh|oŽzž‡¨‘­›°§±³¯½¬Ä§Ç£ÆŸÂœ¼·ž±©™ “–‹Œ€uvkmbd\^XY€’‚‰Š‘‡˜‡ˆ¡‹£Ž¤“£—¢š¡›¢›¡œ ž›œ—˜‘”ˆ~sŠi†de{iuppwm~lƒm„orxult_sTpNnLlPlYmeoqt{yƒ}—„ ‰¥§“¦™£Ÿž§™«–«”¦“Ÿ“–“Ž“†“€’‚‰Šlvdn`e^^[YYXX[XbYl]xa„fk•q–x’~‚‡ƒ€‚{}wwvpwi|e…d’c d¬d³dµc³a«\¡V•PˆMxNjT`^\l^|eŒqš£Š¦–¦¤¤± »œÁ˜Ã•À“»”³˜¬œ§¢›œ•–‚ˆwlvdn`e^^€’€†Š”‰˜Šœ‹œ›“™•˜–˜•›”–Ÿ˜Ÿ™Ÿ™œ–˜”‡}‹r†kiwkopjwg}giƒnsyvkw]tPqHnFkJjSk`oou{|…‚‘…›ˆ¢Š¦Œ§Ž¤ž”˜š”Ÿ’Ÿ‘›‘•‘’ˆ’ƒ’€’€†Šrkyhohfg_e\d^dcdlewhƒkn’t‘{‹ƒ„‰}Œv‹q‡ooxspyj„g’f¡g¬i³k´m°m§j›d]XqWbZWaRlTy\†h’w™„›‘™Ÿ”¬¶‹»‡»†·‡¯Š¦‘ž—™š–š•–“‘†|ˆrkyhohf}Œ…‰‡’†–‡—‰–‹“ŒŽŒŽ‹ŽŒ‹Š•™’›–œ˜š˜—•’†ˆ{ƒrznroksfxd~eƒj…pƒw{|m|]yPuFqCnGlPm^qny|‚ˆ‡”ŠŠ£Š¥ˆ£†ž†—‡Œ‹‘Š‘ŠŠŠ‹…~Ž}Œ…‰‡zŠtƒsytntes`r`qcpjptq~r†uŠzˆ‚ƒ‹{’t–n–j’i‹l‚rwzp†l”l¢n­r²u±y«z¡y“s‡kydi`Z`OcJjLsU}b‡qŠ›…¨±z´w²w«z¡–ˆ‰–‰˜‹–Ž‘Š‚zŠtƒsytnv„y‚€€‡}Œ}Ž~Ž€Œ‚ˆƒ„„€„~ƒ€€„‰ƒŽ‰‘’•‘˜Ž—‰“„‹€€zvsrlsfvd|e‚i‡o‰w‡€€„r„bS|IxFtIrRsawq€€ˆŒŒ—ŸŒ£ˆ¢ƒž–|{„€€„~…ƒ€{ƒx„v„v„y‚€€‡}„€Š€€tj€c_~`}e|l|u}|€€…~x•rœm i hœj”oŠv€€x‹t™t¦v¯{²¯„§†›…Œ€€wrnbgTdJcFfIlRsazq€€€|›w¦q­m®kªl¡o•v‰€€‰|~•‚–ˆ”‘Š’„€Š€€tjtmssp{o€oƒpƒru~wzywzuyvvzv{‚‚…Š…ƒ”€•{‘uŠqmvgsctayb€f‡mv‘€‰‰{kŠ\…R€M|PyYyf|v„„Œ™Ÿ‹ †€•z‹vuuxp}o}ozpvrqsmtjujtmssp{o‹‰Š‰€ŠtŠjŠa‰]ˆ[‡^†c†i‡o‰qŽp•lh£e¦d¥f¡k™rŽ{„…|yz©}°ƒ²ˆ®¤—ˆŠ{nv_mQfHbEbIdShbmrq€ro™k£g¨d¨c£e™jqzwƒu‹w‘}”ƒ”Š’‘‹‰Š‰€Št]b_ae_l^r_wayeyixmupsrqsrrtrwxxx‡vs‘o‘je…az^r[pYsZz^ƒeo•zš…›•”ˆ”x’h]ˆX‚Y~`|m~|„Š‹•œŒŸ‰„–~‹x~tptdw^z]y]u^o`iacb_b]b_ae_l^ŒŠ‹…Œ|qŽgŽ_ŽYWŒW‹Z‹^‹aca—^[¢[¥\£aŸh—q{ƒ„|{œ}¦‚®‰°‘¬—£›–›ˆ•{‹n_sSjJbG^K]T^a`pc}cˆa“_›]Ÿ]Ÿ_šb’h‡o|wtr†uŒz†ŠŽŒŒŠ‹…Œ|qQRRQWP_OfQlUqYt_uetjsnrqrqrsryp€m‡iŒdŽ_ŒZ‡VStRmQlQqTzZ…c‘oœ{£‡¦’¡˜•™…˜u”iŽcˆb‚h~s}€Ž†˜ˆž‡Ÿ…š}‚yrwbvUzO|NyNsNkObP[QURQRRQWP_O‰ƒ‰~ŠvŒmdŽ]ŽXŽTŽTTŒVŒWŒWT”Q™PPžTZ™c’m‰w€zŠz–~¡†©Ž¬—ªŸ¢¤—¤‰ž}“q‡cyWmOcL\NXUV`VmWwV€V‰UW“Y“]cŠj‚q{wu}t‚w†{ˆ€Š„Š†Š†‰ƒ‰~ŠvŒmJFIFMEUF]HfLmRrYv`wgwmurttswo}j„dŠ^XR‰N‚KyJnJgKhMnQxX…b“mŸz©‡­’ª™Ÿœœ€™s“kŒj…nw|„}‘€›Ÿž€—~‹}{{j{X|JDC{CsCiD_DVENFJFIFMEUFƒ|„v…oˆhŠbŒ]YVTŒSŠS‰RˆO‰LH‘G”H•L”S]Šh‚sz{u„w~›‡£’¨œ§¤¡©˜ªŒ¤™u‹h~]qUfQ]SWXS`PjOqNwN~PƒT†Y‡`†gƒou{yy|y~{~€‚‚‚‚€ƒ|„v…oˆhGAFAIBQBZEdJnPuWz_}g}o|uyyu}o„fŠ^ŽVOŽJˆGGuHjIdJeMkQvX„a’l x«„°®—¤–Ÿ‡z˜q‘nˆq€yz…x‘y›zŸzž{–|‰}y~f€T‚F„@„?~?u?j?_?U@L@GAFAIBQB{v}pj‚e…bˆ_Š]Š\ŠZ‰X‡V…RƒNƒI„D‡B‰C‹HŠO‡Y‚c|nuuq}t‰|”‡“£ž¤§¡¬š«¥…šzn€dt]iY`YY\TbPhMmKpLsPwUy]{e}n}u}z}|~{zyƒxƒx‚x€y|{v}pj‚eJCIDLESG]IhMsS{Ya…i…qƒy~y„o‹e‘[”R”LH‰G~HsKhNcPcRiUtZajœt§€®Š­”¤œ— ˆ |œs•pŒr‚yyƒttšsžtv–yŠ|z€h„WˆJŠDˆCBxBmAbAXBPBJCIDLESGsrwlyg|e€eƒe†fˆeˆd†bƒ^€X}R{K|F}CC€G€MW|awjqqnxr‚{Ž†˜’Ÿ¢¥ ª›©’¢‰—~‹t€kvdmaf``b[eVhQjNkOkTl[ndqmtvx}|€€ƒ|…w‡sˆp‡o„oqysrwlyg|eSLRNTP[QeSpV{Z„_ŠemŒu‰|„ƒ|Šq’e˜Z›QšL•JŒL€PtUjYdZd[i\q_}c‰i•q z¦…¦Ÿš“¡…£z¡qšno„vy€rŒp—oœpœr—w|‚o‡_‹SNŠN„M{LqKgK^KWKSLRNTP[Qmqrkuhxh|kn„q†s†r„oj|cx[uSuLuHwGxIyOyWwatioomur~{Š†”‘››Ÿ¢Ÿ¥›£”›Š‡x~qwlrimhiiej`lZkVhWf\edemhvl~s„z†ƒ‡|‹tmi‹f†g€iymqrkuhxh_[_]a_gaqa|b†cŽf“j”p’w‡†}q—ežZ¡S PšQ‘U…\xcngihggjfpexf‚iŒn•v››•™Š¡~¦s¥lŸi•kˆq||sˆo“mšmœp™u’{‡zˆmŒb^Š^„\|[tZmYfYbY_[_]a_gajtpnslwo|t€z„‡‚‡‚„€z{qvhr_qVqQrNtPvTw[wdukqpout~|ˆ†’™—œ™š“‘Š‡€z{uxrvpuptqrrnqgobjbdfan`vaf†nŠwŠ„‰{Žq‘i‘cŽa‰aƒe{jtpnslwomkonqpvrqˆo‘n–m™o˜r”wŽ~††|o™d¡[¥V¥U Y—a‹jsvwpwmtmqomtk{k‚nˆt~‹ˆ˜~£t©jªd¥b›elwwƒqn—mœoœs˜x†„|ˆs‰p†on|lvkrjoimjmkonqpvrkzruvtzx„‡ˆ‹‘‹’ˆ„‰~€xuskqbq[sXuXw\yczjyqvutyxŠ‡’˜”›—š––‘‡‡~yywvwuzv|w~yz|yuvnongqaw]~^…b‹is‹~„‡yn‘e’_^`‡e€kzruvtzxyz|}€€„€‹~’y˜u›q›o—p‘rˆx€€vŠj•`ŸZ¥X§Z¤ak“v‰€€„yƒtqzpurquoyp}v€€{›r§i¯a°\¬\£`—hŠs€€yŒt–qœpŸržu™y’}‰‚€€}z~w|uztytxvyyz|}€€„€s€{„€€ƒ„ˆ‹“’š”ž“ž‘›Œ”†Š€€{uylyezb}bf‚mƒuƒ|€€~ƒ€‰…‹•™“™“–‘‰‰€€wxsuttwu|y}†ˆƒ†ƒ€€ywwnye}_‚]‡^‹d‹mˆw€€t‡jŒb^_cŒj‡sƒ{€€€ƒ„ƒ†ˆˆŒŠ‘Š–†š€œz›t—om‡n}styk„aZœV¥W©\ªe¥qž}•†ŒŠ…‰~…yuystsrtsvyw‚vržjªb²[´W±X©\ep†|€ˆy’ušržqŸrs˜u’wv‹u‹sŠrˆs‡u†y…~…ƒ†ˆˆŒŠ‘Š€ŽŠ’Ž’’—˜›žŸ£ ¦ ¥ ˜™“…ˆ{‡r‡mˆjŠlqx€ˆ‹Œˆ‰”Œ˜Ž›œ™Ž“‰‹wwoplnnpstzz‚ˆ‡ŒŒŒŽ†Š‚}w}ld‚_„^…a„h€pwym€e‡a`‘d“k“u’€ŠŽŽ’’bklSuKƒR—Y¤]¥]™Y…TvXpfswz„ˆzh|T„EŽA•F“P…Xs_jgholyoƒkŠ`ŠWˆS‡S‰V’X™[–gŒy}Žp£l¯p¹pÂlÇdÃZ¹S­U˜azocz[c|u{…†”œ‘œ”Ÿ|¦i`‡bklSuKƒRg”\OhlMœP›hhea`q°Œ¥œ¦zº©|vzB…>ƒl‰v¥_ªV”q~ovPmI]jL|hn“dŒŽj©n‘ˆf”Z h¦« œ±¨_‹]r~‰œ|›{wtaejvk l³€³ˆ·j¨OŒMrKkQvfkwarrg”\OhlM`}jktei”m¡o¡m•jgsmsz{†„‹‰‡‚{nuZ{O‡Q[g‚jtgrewg}o}vŠg_Ž^Šcˆii•f•iŽr‚€vp™q p©n­kªi¢g—l…vl\ƒZ€gw|uŠ~ŒŠˆ”ƒ•‚‹w›f›^`}jkteimciN`un¢zŸmvZq[–f©f{Ž “”±w{FoAzc”c§R­Y°€Ÿ’~‰WwJ\bLel`”o‰¢gµh˜v„Š}¦q¢f†Ž°ºv¦dƒpv…”Ÿ~ZqUw}‰­‰¿³…­_šR}ThKrT‰d€nk}fmciN`ungŽuƒ€€Œƒœ†¦†¤„•€€s…s{—…—‰Ž€€lx\}X‡aŽq€€€txuolˆq‹€€o‘il„v}€€‰wpo‹r„y€€†~Ž~“~‘‰€€…o\“R’V‹h€€{ŒŠ‡Œx‹u€€n‘a™_˜gŽuƒ€€Œƒ–z‹w€€–žš¥€€]g]s€€Œa‚[€€Š³‡³€€mWd]€€”z‰o€€šŸ—€€_{c~€€u“iž€€­e©q€€Œ‘–€€TdXl€€žwŸs€€^¡]§€€€KrK€€“¥‡Ÿ€€~…tŽ€€„fwj€€‚…s„€€–z‹w€€–žwžŒ™™—¤š°œµœ®š—‰”{˜w¡y¦}¤~›u‹f‚\„]‰jŒ}ˆŒzŒoƒsz€uŽy•‡•~–z~‡srŽ{ƒ„w‹ompŒtŒy~ŽŽzŽpŽf‘Y—KšH™S’iˆ‚€Ž…zyun|a^šf wžŒ™™—¤š{´‰®Š¨Œ¶vµT”7w@j’|xvw‹ƒ¨œvwpouŽ‡²€Ÿ]LŠeœn„WlVv†ˆ¯˜¬‚¦„z›kŒ„a”^“z—„‡ib_LgJy_{`²:Â5µS‡WRPDacztqe_Lcls¡†¬Œ‰YN€fc•a³{´‰®Š¨Œ¶ˆ¬¡¬±ªºªÁ¬Á­¸«§¨—£Š£¨{¬wªt¡o’f‡a…c†n†~ŒrŽh†o}€x”}¡‹žš“ž–‘…•t—m’q…wx}pƒnˆrŠvy’w•p•d“WMŽD>BT‹n„ˆ}—wšr“kˆd}[~W‹]šo¥ˆ¬¡¬±ªºªdÅvÁy¤qŸf§R›7rCir…•Œ•‰——•vˆpŒŠŽ¥€³a–KuK‚Zb~Tzd‚—~®‹£±™«‹xˆm‚ƒf†I{^Œˆ”x’XpJmeu™d²;¸6°RSeNW^]„U‡LfL]qn¢w®}‘ŠjƒOnWc‡]²dÅvÁy¤qŸ‘¯ª³¹°Á­Å®Â°¸°ª­ ¥– ˆ£|§s§n o‘n„k€lq€z{…m‰c‚iz|w“{¦Š¨œ¡¦Ÿ¢Ÿ“~˜qŽmktmosq{y‚€ˆx–k–[‘L‰Cƒ>=}E}X}szŒtžl§d¥\™WŠS‚Vˆc–w¤‘¯ª³¹°Á­w ¤€€zqƒ€€\YWW€€—™‹€€pŽh€€Ž˜™€€aljb€€‡‹Šz€€‚…Šu€€³Ž³€€yt‹†€€MhMr€€³|³€€u‚‡†€€Z‰_”€€}msy€€ªn­o€€n|€€ƒŠ€€pf~g€€w ¤€€zq¦¢¬°¦· ¸¢´¦«¨¢¦ž›˜’‰”z™oœm™t‹z}yzv{s}t{}nb|euur‹wŸ†¥œ£­¥°¤£Ÿ”y…mubl_kdto€x‰‚‡Ž}•o”_‹R€MtJlHiOk^pusŒo¡f±^´X©V•Z…aƒn~š¦¢¬°¦· “{¨{®`¥d¡{ |ƒ[d[j„yli\Qgduƒwž–…vthcgup“’¡›«x«d™ou€\ŸhÈrÇ^œ_‡ˆ„˜ykZYK{M°`º‹’§‹šŸoŸLƒ^€vŒh‹X”r¬ŠÊ~Û‘‘Œ‰o|¥¢Ÿ°†ƒ‡Z^“{¨{®`¥d‡•Žš˜’ŸŠ Œœ“•™‘—’‹€ƒu‰mn{ƒ‡u‡t€yxr€xu~gycrkn|r•š™²Ÿº¢°œ˜}nm]dWf\riu‹Šƒ—y•n‰gzekb`]]]bdktsˆq iµc¼`²cœk…u||€‹‡•Žš˜’ŸŠ–w¥i®^£z‘‘™£k…]dzkr_bT[t¤‰ž€wqahu`h~„“–®’¨e™]m{_¥|¾{¼[£Q‰ssœk‰YpIM¯^¸}œ¢”¥žw¦LŸ`‘y}isJŠX®y¾v·r£‚ ¤•¢{~|yœ˜¤²€‰o]€e–w¥i®^£z|†z‰€€‡w‡{„„~Œ|Œ€€€twvm€i‰o‹€€ŽssŠ|€…z‰€€…ndudolqy€€š†³“¼›²›™‘€€km[bW``iqv€€Œš€¢~ž}~€€p{epcgjfvo€€~˜x°r¹p°u™€€‡t‡u‚}|†z‰€€‡wƒ€€yšl–€€¬e¨_€€‚‹‘|€€b©kª€€yQwP€€u‰kw€€ˆ¯y¯€€„]tb€€¨¥€€^t\u€€zqu€€£yœl€€u¡vš€€’Ž—˜€€bVeZ€€‹‡r€€ª–ª€€re}l€€`m\c€€ƒ€€yšqwfzhrolqtn€k‹hkƒlxhyf€j†v…ˆy•p˜u’‰Žƒ”‡‹Šwev[nZo`}d—m®~·®“—npech^vb‰j—p rªv­}¨†›Ž•€y‚ys‚lo™}—–­†¶‚­„•Ž}•oŽmqqwfzhrol†›a¥P¬V°b‰„]«O­`—¥Ž°™›«j»P™Y`iD…V¡Ÿu•Y¤]˜‡g—Z…ud‹S¤c»v©xƒp_sH~U‰U“T¢o­•“um‚[­^¶p–¢µ¯ª }{V€Q¦]¯n¤v¥¶­¦«•n„lxoaY`Wƒ{†›a¥P¬V°ifUiQgWg\r^^Ž\“\\…]‚cq„x–l h t™†—ƒžƒ•‚~wdjQcHfHuKU¥g±x¬‚›‚ˆy~m{eƒc‘f¢kªl¬j­nªx¤†œ—”£¢”…šz¦y°„®š£°–¸¯™—p”fdifUiQgWg~ž_±O¯V¯g’Šd›WkŽv³u¼‘ ®m³L’__rZ€x™‡¨f¡P¦W—bfmX|{t˜`©l©~r€dˆV~RvE’I­n¬Ÿ‡¢s{Œ[¸_¼€“©Š½Ÿ«¥Šƒh€R£TÀq½‰¨•Ÿ§–®‘¤”“’‹tXcOxt~ž_±O¯V¯kXR^GcLjTw[†^‘]—Y–U‘W‹c„wyŽn c¦e¤v›Œ€£{˜uhb\KX?_>nA…KœZ©i©ržt’oŽk’l›p§t°u±p©iŸf—m’~’””¦—©™ ž’¦‡¯ƒ¸‹· ª´š¼Ž³Œž–‡ s™b†XkXR^GcLj‘ž†—€€w‘l›€€…qt‚€€ªf¥l€€[“W™€€‡zuŠ€€“a„h€€ƒpxf€€†‰t€€„ƒ€€„’‡Š€€c”\˜€€°[¯Z€€V­W¯€€¡hŸu€€}a‡]€€k¥p¢€€~l{p€€ƒ”€š€€rUiT€€‘ž†—€€w‘xP^[PiSu]g‹m’k•b—X—Y’e‡zy‘kŸb£i¡}˜’‹Ÿ}¡t”jz[^QJQB\EmLS•^¡g¢lœm–k—n x©‚¯†®„§z—k…_y_xn†œ—¥¢ ˜¢Ž§‰®¯£¢µ’¼…´ƒ Štž]PxP^[PiSu«™¨Š™uy‹U¦\™mŒm¡u©ˆƒZqY\x\Œ~x‡„—|r˜W´a¢|ƒ Ÿ|ohKl\szb‰\‘n–„™sœvzœRÀC®NweKŽJ¨t‰h{dco|W¦H¯\“€y{mVfMj`vqmqYjVY\Slm«™¨Š™uy‹Ow`guhƒsŒ~ƒ€‹rc•^“e‹uˆs“m–v—ˆ“˜‹Ÿšt‰frW[OPSPaZse„k“pšr™q”pp–y¡ˆ¨”©—¡“‚}lfXYQ][os„‹’™˜›—•“Œ‘‡—Œ™ž°·w°w„‰˜q¢YžKOw`guhƒ³€µ†‡c‘I¦WŸrŽ{™n¬^Še]_x}izn”l–{šŽ£œƒ«YµJ±f–œw¥iweKdRfhgv\„LŒ`|f–vq¡PÁb³s€jQwR—’†en_j}’v°Z±Z«}™}|XgWquˆ‚ucVQ\Xhym”…‹³€µ†‡c‘¡Qg€€€Ž‰’’•„}€€m‰aaŽj‰x‚€€„ˆ‹– Ÿ‰“€€pj`ZXW]amr€€Ž…•†•…‚„€€‡‰”—›Ÿš‘€€hgQOFEONff€€ŽŽ’‘ŒŒƒ‚|{€€ƒ‘|¤s¬m¥q”€€–i§R«I¡Qg€€€Ž´h´u€€Za‡€€šižj€€UuUi€€…œu“€€•t‰n€€œ ‰€€R•Qœ€€¢r›~€€xzŒ€€ŽR”P€€_™_Ž€€¦œ©£€€OsP…€€…SsS€€ž•€€€’¢š¤€€`ufƒ€€t]i^€€†©u­€€´h´u€€Z³Q¥l˜†™” –¥Ž¤›v‰vue]–_šf›jšož|£‰¢’™“‡Œt~do]hbnr|†Œ”•–”•Š’|ŽoŒku•…Ÿ’—‰ˆzwcbLLCBLHd\~s€€Šx~muewh{zxŽs˜s”yƒ‰pŸ[±H¸D³Q¥l˜†™”¾¬zsq\_zX©U¿E¼A¤Q„bp}| €¯{¢™}Žfwdz’Š³|©es{NŸc¤Ž›œ¤‹©Œ§¢¨µŸ³†ž‚œg¨b z¡ ¯¥œ~wGk:lahkXeav{…Ÿs©‹¿’¿tžRˆWtpv[m‹£¤‘«™”¾¬zsq\_¾P¶n¯Š²š¸ž»—µŠ§|”x‚m‘a \¬\²Z³^°m©›Ž‰”ue‚_xdus|‡ˆ™“¢’ž‡–wŽhŠ]Š]Žl•€˜–”Œ€}ugfOTEHLHbS{cŒl’ja†U|N{Q~c|x|„€ƒ‰u˜b©N¹>À>¾P¶n¯Š²š¶¤œœi€TXpF¥WµV¬K¦S®q ‡¦‚œ‚…yW™Nn‹š¢±—¬q‡e\ƒ^¦„¤žy§z¨šœµž§­†«q¢lŽu‚‹™ª ­‚†oOl>b_kh‰a–p‡‰Œˆ£…¨¢¬¤²}œX‹`‹…{Šk‹y §x˜Šžœ¶¤œœi€TX¼N¹m¸Š¾Æ¦È£¿˜­ˆ˜…‡u•j¥c³^¼W¼W³d¢vŒ‡wfŠ^czr}††™¤“¤ˆ˜u‰b~V{T\‡o‡Ž˜Šœ‚”z…wnrUfHZMR`RxY‹^˜ZšR“IˆDƒGƒXƒn…|‹|–p¢^­I¶:»:¼N¹m¸Š¾ œŸ €€[XXX€€Œˆ~{€€¤¥‡€€{qŠf€€N•Mˆ€€›¢§€€xUqY€€€œt€€o„su€€¢}€€{_vY€€Ÿ£€€TUq€€„¯u­€€wƒ…€€£}¨Œ€€VxZ‰€€uu…€€ˆ]{a€€ œŸ €€[X¨Lªj¯‡ºœÅ«È®¿¤«”•‰…Š{”u¡q¬l³a²[¥cryhˆ`axoy…šŠ¥¥Œšyˆ`sOgLfUpf~}„–ƒ¦~§x›vŠ|t[}MsOga]x[]žX¥R M”K‹P‡_…tˆŽ‚˜w d¥N§<¨;¨Lªj¯‡ºœ˜wºŠ®xˆTn\w‰x’hƒa†p‘m‚Uvijše¥pŒQgfMrjcx]buI”X¯{¹p¤U…ZicVW\Ymur’UG~Zx~‹††€aƒO‰vˆª“­œ¡‚¥^˜Zn]eT“b§…Š‡XxCr\^b\[xh|p^_Vc^˜wºŠ®xˆT‹Kf˜‚§™¶¬¼²´ª¡™‹Š‡}‹’™r™h‹jwtga„d{ns‚wš©‹«Žžƒ‹jsP]CRIV]guxŽ¦|²u­rœtŠ€tŽ\“OR€dqzj‘i¤e¬a¦_˜a‹f…t€‡“†’Ž…”r“ZD‹>‹Kf˜‚§™Ÿk¼‡°„¢X“T}u‡swewOŠK‹S‰ov›eª{‰en^LUTO]e[Ž^©v±§vˆUsX]jOadUviwp‚Y™X—vŠ€Žs€s^t[ˆ”­”®q¬W©^…ga^nQži®–•g†Jr`YjW`iomwmcsieŸk¼‡°„¢XpLve€€‘—£©¬­§£•€€vzy{‚~ŠƒŒ„€€srsd{^„bˆp€€w”{©…³­˜€€dgJR@KJUdk€€˜…­³u©o”r€€k“VžMžS•h‡€€–}¦y«w¡wz€€wŒrœq¥u¢{“€€}fvMqCpLve€€‘—¥ržƒ€€‹U—T€€w‰€€\Žb‡€€‰p‡f€€¡š€€hx_y€€Ÿ•€€€}s|m€€m–c’€€|–€€|—€€‰l’z€€o‚x€€€R†S€€^”XŠ€€¦ŠŸ‰€€bƒ\ˆ€€†yt~€€‰Žv™€€¥ržƒ€€‹U\U_mg‡w›Š¦•£“‘†yufoawc…iq“u‡s{i|`„_Žg’wŠˆ€š„¬Œ±’¥‘Ž„ui`QRGTOef€–’™ ¢•v€tn€_”R£O¨[¥q‡˜˜˜¡•““w•fš^£X­W¯\¦d”j€iicS]K\U_mg‡w›£—Œr|r_~gz‡‚‡œ~œ„Ž‹›~«vžt…qv~x”ƒ–‰v‡d™|®—ŸˆntMKŠcŒˆ€«}¼Ž´™¯œ›¦|žrp|R{v}œš“ªy«s¡ojfiu\—B¡Hk“ˆŠhtbZtW‰vw‘ft§·r¸œ£—Œr|r_NdL}O”[¢j¥u™y€ubmNoJ~MW›d›oŽr‚mƒfŒd•j˜v……•ˆ£¤—–—~‹frV]RS^Ywj—z­„®ˆ „Žy€j|_‡[šZ©`°n°­­•°•²Š³v²_±O²Eµ?´>­EQ‰[w]fYXSVNdL}O”[¢¨¢§Ÿƒ‰gyf~€}•fŸb¡s²}¹ƒ§ˆ“‡Œ‰v{nqt{vrrcˆx«’¬Ž}†N•@‘R{z~¢º‘´Œ£†©m…\XaU|‡Ž¥›‹¨y½³~uƒu’b’L‹Vd…r]ˆO…lh|\{ib‹Yn¡w½l»{£¨¢§Ÿƒ‰gyPsGŠEžK§S¤\’cvhXkEv@‹CžN¦^¡o‘y…x†rŽm–m™rŽ}„Œ‡——™‰šr]zRjUcffƒp£v·tµm§e•_‡[„\Žcžn©{¯†°¯³Ž¼†ÃxÆfÄT¿F»;·2®1 :ŽI{Xm_c_^YcPsGŠEžK§¬‹©“€€V}SŒ€€“_…f€€¡¤}€€g™oŸ€€rims€€|jne€€” ‡ž€€˜bš`€€‚š•€€l}y€€€bd_\€€­¯€€q¤‚¤€€|€€€ns|…€€zN„M€€lp|€€r„it€€„Ÿs—€€¬‹©“€€V}c|UŽNL¤L OWyc_oNƒGœG­O¯_£sŽ‚‚…ƒ‹w“p”o‰v~„‹•„˜qŽ_}Ws[qkt„xŸu¯g­XŸNN†W†cu‰¢˜£¢—¢©ƒ·xÃmÇcÃYºO±B©6œ3<~Nqbjoetfomc|UŽNL¤™{€‡To4v:šbšjuYsXŒvzfwY•S©N’Sƒzž©´¥ˆ‘VœTž‡z²l±›œ”† … ‰r\`hlŽo›dq[¤z¯Šœzzzput~zt…ttfmnƒ–ˆ£n{\oU‘g˜–¯ƒ ƒ•dž]›nŠhŒ`™{€‡To4v}pˆe’^™T™P’V„esxf’]¬V¹W´cŸu‡†{}Š…€vŽp‚uvƒyƒ’ŽŠ’{ˆm{dxd|l€|Žx™b–MŒCI|]€s‹‹•¤•±­‹œ‹†”w¥n´k¹k³l¥g™XHƒBzIs]pso…not}pˆe’^™y˜h¡Sy=yBš[›UnKb[{lŽf‘i‰|o©PJ~rœ¨´«‹™[ŸQ›zz¨x²›±—®vž|‘Š€vcih}Œ}x\•N¤v„Šl„tˆx¥t¥}Ž‘w†ch_kq}“y§UšFVš‚”­v­v¤ƒ¥lžX–P–Q‹jy˜h¡Sy=y›w‹z€€tˆdZ”]‘kˆ€€šs´f¾^³bšo€€t‰wŠ…ŠŒ{€€stš}Ÿ†šŠ€€uuwm€lˆpŠy€€f}NuEnNmfs€€š‡²…¼}³wšv€€p’k¡o¦yžŽ€€ow\rRqWui|€€”~¢z¤w›w‹z€€tˆl´z³€€mtq…€€qYg\€€…”t‘€€ª§›€€]e\q€€ˆs{s€€€‰qˆ€€¦¢™€€‡y•‹€€rw„‰€€vL„L€€UT€€€‡˜v”€€£qœo€€„‚Œ{€€^ƒ]{€€¤~£s€€}™Œ”€€{dŒ\€€l´z³€€mt±p¤mšqŒ{wˆg’b•j“{Ž”©p±b§_gxuq€x……†„“„ˆ‹{™y¥~©ƒ£‚—wŒmsulj–mruq^jUe^eslŠx €µ}¼t±k˜g~np~p‹zŠ…˜u™gˆatbhkiyxˆŒ‘¡Ž±„¶y±p¤mšqŒ{•—”¦{o”j^wQhd~„‰‡ˆ™v·‚¯••Žyrh\{Nˆ]xŒl¨b–Sq]Sg°ƒ¢všl”|wt\f\wZ}Y^oYwu]u`aˆfwze€O¯Z»~¡¤¢¡±y­\’]\¢]¥kŽŠs§r«užn–rˆ„v|•—”¦{oÅo»i²l¢xˆ„pŽc’c’o‘‚ˆ’w—hb€fqsr„…„ „•Œ‰™…¢„¤„ž~”ph…qz„p—k¢k›p†rtnnkuk…q”|¤„³¸v®h˜^€^thwp†q›j­]±P£KO„]ƒsŠ˜¯—À‹Ç|Åo»i²l¢xb•e¢€³€¢g~\^hVpqs€‡Œˆ£~Ž…‹•Ž”t‰O¤dš—u£[ŠQpXV~b¦ƒœ|Œi‰pskLOFXWx\‚mvƒi{VmPmŽz`‰Pº`ÁzšŸ¶¦—®b¥]§h¡c€ho’§ˆpvsˆ£›†zb•e¢€³€ÌrÄk»pª|…t‰cŠ^‰f‹qˆy||oxhrjnwx‚Œ†žƒ©©~ž†“‘Ž—Œ–ˆ‰o†g…q}…všq§q¢w‘|…{ƒx‰x“{™…Ÿ©Œ­¨p˜_„WxZ{^Š_¡[µR¼G°@¢B—P•hœƒ§–¶˜ÄŽÍ€ÌrÄk»pª|ŠKyK€€ª¨€€^–`‘€€‚u†€€€hpd€€ ž€€©ƒ¬‘€€fuq…€€|™€€vn‡|€€YX^U€€{¤pž€€ƒ_sY€€‹’{ƒ€€¯}±o€€j²x²€€„w‰€€RoR~€€„WsU€€Š²x³€€ŠKyK€€ªÁwºr±z¡„‰‡s„e€`}d‚h†hgugojqq}ƒ‰™‰ª‚°zªwœ~”ˆ’Š’†Ž€„{s~i‚q€‚{–x¢yž€‘ˆŒ‰Ž†”ƒ˜„•‹“–™™ž’ž–m†^yYxZ…[˜\¬Y²Q«F¡A›H™[v¤Œ¯“»ŽÂ‚Áwºr±z¡„eDa?up¤–µ¦¤«‰»y¶„¢†ƒtbmVcJ\Kuf{Œa˜]‰’ˆªˆŒ|||‹“—ˆœ¢t‚{£ƒ¡„ˆb”c­™¸tÁj±fŠfh„}—¡ˆ¬­ž˜wkm[Šm’u}kxgYwGf[fhˆ`…n‘ˆŠ§i¥bzeDa?up¤–©{¢x™‹Œ{Šo‚ixitm|k„d_z`uivx‚¥Œ±ƒ¯x¡r‘yŒƒ‚“|“u‹rzyn‚qƒ~€Œ|•}†‡ˆ‘Ž”ˆ”†‹‹ƒ˜†¢¢“–’…nuepcvf„k”mšh–X‘JŽHŽS‘j•œŒ¥‹ªƒ©{¢x™‹ŒLAT?}o›¡¡·£¬Ÿ²‚²sš†eŠHuZQ]KXlmm†Y€_y•}®{–„Š’ˆ…’`±[´u—œ‚´z¦sŸZªa«Ž›°‡µo°M•Qoz¥ª¥»Ž®¤…ŠemaY}]…uizWqUmfg„aŽoŽ‘—š˜ƒ…„kŠ]tLAT?}o›¡y‰v€€uŠn‰mqyyv€€z‰n…e}dumt€€—‹ª‹¯„¦|’x€€}‰…‡Ž€“yw€€r‰pˆwz†x€€x‰|Š…†‹‹{€€ux €¨‰£‹“€€ntesexnz„€€}nzZyPzV}i€€…‹Š’‚y‰v€€uŠ[OVO€€§|£€€–‡Ž”€€˜M¡O€€R…Vs€€€’rƒ€€¦£q€€ƒ†t€€N¨M£€€§w¡}€€‚cŒ\€€”‡€€KxKk€€ª§¥¡€€ˆŠ•€€vO‚P€€il€€“}–n€€{µ‡´€€wt†€€[OVO€€§…oivqom…r†{…††‡–{r„qyyuˆ›Š¨‹¨†š‚ƒ‚o‹l•t”Š„‹€€†ts‰x€~wszyrtyv|l{dogfxiŽrž{¡—w‡f|[{W[‹c“h’gƒhqjgmjqxt‹y“‹…}…oivqorvfqt›q²[›Xx€~¦€°g§Q‹qg¡Ož`Ž˜¡wŒ{ƒwpNnfu™w¥ƒ–x™y y•U–_xdrSŽV‰oarRMeK}u››«™“{u~€ŠˆtsVxjzŸq´z¯ˆ®“œ‰~hŠU¿UÂU^‡{ ˆ£rvfqt›q²„b€Zycuuv…{ƒ–Šš ˆ¡™~„†€‘‡œŽ£‹Ÿ†‚y…f‘^bžm—yŒ‚‚‚z†|ƒ‚~†y‡x€xƒs{pmm\fP\OU_Xx`k—r“p†dyXwP~N‹P™UžY—`g‡n‡sŽv™{™€‰„t„b€Zycuu‹„‹~už`¬V˜Uˆr¢®_‰ega¤[—b•€¡ˆ›r‚or{~f‚Mqdq’…ª‰Ÿ{š¢Š‹œa¢X‰pslQšF~SViS`uY”l£œ—‰Œ†Œ„€rhg[urŠ ‹¼€¼v°‡”{qHÀ@ÂU’a†mx§‹„‹~už`¬ˆW†Sƒ]‚s„Š‡›‰¥ˆ§…¦‚¢š…’‹Œ‘Œ•‘˜šˆ–‹|x‚fXŸT¤Yžg‘v~{{‰zz’}‚Šˆ‰w~mlcYZJREMRNiU_ŒiŒn€jq_kTpL€J”O¡Z¤f¥q¤y¡~Ÿ€ ‚—†€ˆhˆW†Sƒ]‚s§e«b€€jŒw€€€•Š•€€ab‹€€}mps€€ƒƒ€€‘Š›€€}t{†€€…^„d€€l›e¢€€¡gœq€€gleh€€…”yŽ€€“sŒn€€ˆ“‹€€lkke€€›–€€‘fœ`€€S®W¯€€†k{w€€§e«b€€jŒŒR‹T‹by”¦Œ­…©| y˜~‘ˆ‘Ž–’’•ŽŽŽŽs‰p~ynŠZœL¦J¤W•k‚}t‰q•q›v›–‰‰}ƒptdc[TWNTVQiS{Z†f…rzuhn\b]WmS„Y˜h¦x²ƒ¶‰±‰¦‰Š‹s‹]ŒR‹T‹by¢a­e˜}‘¥t±w™’uš]‰W|pl™TœG…Yr“Œ£©±«°¢™Šnxl\‡X‡lfpZb\`n†¦„·q´l¨r–lƒo…‚‘b•O…S_WL]mq›’¯§Œ‰c[cUƒg‘d‰\‰OƒLoidƒˆ®[¬Vl…u¢a­e˜}‘‰RŠ^Œp‘‡– –¯®„¡w‘t…|ˆ€’†“‰„‚q‡e‹cˆoy‚`˜J§B©Mœe†}uml¢r}”ˆŽ‰Œ€‡vmuhliefj_v[‚^ˆi…yxƒc€QuMkYfqmŠ ³”»”´¢‹‹|Šd‰T‰RŠ^Œp‘‡{z„ŸŒ¥}­y²‰”šg’awjntfTªE–]sƒy¨™»²¦¡ŠtxdimSŒ]”ˆˆ{mdfKŒZª~š„’~¤‚­†“xuq‚f”PŒQboFxNaiRp­¡•šjklRŽQŒQwcff_[jk€‰›x°V¬eƒt…{z„ŸŒ¥}{W|j€€‡•’ª—±–©Œ•€€{rmŠov~€€usyb‚X‹[Œj€€d—J«@±J§d’€€“užožo•u‡|€€~€{ƒy…y…{„€€|q‰g‘e“n€€ŒhŒQ„GzOvf€€˜š®šµ‘«†•€€l}X{P{W|j€€‡•lxj€€‰iƒi€€s•h•€€†tˆ€€­aªa€€l¤r§€€wjtt€€vj„€€²Œ³˜€€iLvL€€`\€€¥’¡‹€€‡t”m€€V¨[ª€€€NvN€€}™n€€£oœd€€h‰bw€€”Ÿ‹–€€ŠŽ€€lxj€€‰i__bvf‹q›§§—™–ƒŽn‰dŠa‹d‰krsrlgsYSˆX‰h}|b’J¦A®K¨d˜}ˆ|–q”k‰j{nspsuv{‰„Ž’–’…•y›sžxšˆ–z˜a“R‹R‡aŽu™‹›Ÿ‘¤šo„eod^aQ_Q__bvf‹q›qlSiNW]Jc[_q^ƒy’£ˆ§‡„‡¦f·T«\”|~”rƒys˜±‰ub~]šr’hqTOd[uY–Hv^oˆ‹ œ‰›}‘xzt¸Â­¡n^^Y‚p—‘‰®sºa³w¤‚—p s‘z”]‰h…wŠkqlSiNW]JCjIP‘\—o—Ž~–l–_’\Ž`‡h~prtgqgfsZ€U‰Y‡exs`‚K’DšM˜at„y‡m‰eƒdzgtlsuv…~“‹›š›§•¦š’—„†¡”ž£Ž©x¨e¡[š]›gŸx—‰†oˆZvNbITDOAWCjIP‘\—wa„NZaWttg€[y}}¨wµv¥€…x}k“i¬_°gŸˆƒ‘†€¢{±w¡[‰Otdpzou`fSZge†v•XzZzp“ˆ“v–i~fu˜¬±º¬§|ƒQr[Œ†žŸŒ™v—c£X³o¼~µo g”vxevOl\exuwa„NZaW4u=‰H‘T‹duqƒdŽ\”Y•`Žlƒxthbxjm{b‰^Ž_‡euk`rPzL€S‚blzrrzg€a‚ah}qxw’|Ÿ‰£›œ«‘®†¦‚™†œš¢¬·Ž¹|²k§`¡_œjx|€f~RqF_=S5T1a4u=‰H‘T‹”°’¯€€v™…€€\qd}€€›~¢ˆ€€W\€€›lœx€€vz€€€€‚bŽ[€€p˜zŒ€€hsgg€€„‰zw€€{œl“€€‹nye€€©ž¦—€€[jYd€€¥—£€€goih€€›“ŸŠ€€|ƒ€€€Wn\d€€”°’¯€€v7DŒR‹\zdfmWvRW`’oŒ‚p“ffvv‹n™k™k‹lvjdgYgXj_nhrkrkmqdz`ƒcˆm‡z}t¡s«}¨Ž™¡‡©w¥l›l’xŒ˜œ¬¢»ŸÀ’¹ªl›a‘e„qv{h}[vPfD\7`3m7DŒR‹\z ¬›Ã™¢¥¦Š’j~R›[­x°µl®X¢[’j}yp…s|wh„[šV˜wx¥t¥™š¶§°©†{q^{s‰Š…•„€“n…‹›|˜t¢Ž¬¢„YRKI\]†™—~¤[ªY§aži¢x¨ˆ›Š‰¡Ž’žwˆ†e¡p ¬›Ã™¢¥I†XŒiƒpkoSmGnKu\ƒo„Šš¦s¤l—r†ˆ|Ÿx«x¦y‘xzrjge`h`oeumrrlnogxcƒf‹rŠ‚|˜m¬e´j«z–ši™W’SŠ_†wŽŽ£ž¶§½¤µ•¢Žnmyvu€s†o‚htXjInDyI†XŒiƒpkv©pÁŽ¤Ÿ›—Š^–c¬vµn³f¯‰|uqh{y‚ˆu W¨YŒŠk²v§ ¢¾®¹¥“ˆ`ƒNŒs˜Ÿ¥‹Žby]nˆy¤r¥m§‰˜§k‹[U^Obp{‚ŒhŽ^¥Á½t¢d–tŒ}§d²l—”‹Ž›l›nv©pÁŽ¤Ÿ^ŠnŒ€€„e~NuEoPqg€€Œ•Œ¨„¯{§w“€€˜w¯x¹~°…™‡€€rrpivhn…y€€v{tpwg}g‚p€€q—_®V·Z¯j˜€€ŒgP†G}Pxg€€••©¨²­ª¥–‘€€s|rƒwŒ‘„Ž€€ou_wX^ŠnŒ€€„eK«K©€€Žk~q€€rql€€‹‚€€ª|­s€€]‹d‚€€u¡k¦€€¦V¤[€€¥Œª€€iJsK€€®š«€€LaLc€€—vŠi€€x°n®€€†jwr€€†ivb€€°¬±«€€Wu[ƒ€€ U£R€€}‹x€€K«K©€€Žkr“ƒ”•ˆšp“Z‡QZ~n‰„”–”£¤„—€€‡k›e®j¶w­„™‹ƒ‡xzxr€s‹{“‡†‰}zukpckfetYŒM¥J²S¯h~‰Šr‰X€ItKk[opƒ‡˜ž£« ¨š{Šq†tŒ”Œš•™‘Œ€ƒp…kŒr“ƒ”•ˆšpZ¶T©p{|fwa_IzJiŽ}‘wª’bE‘>lKWPrh†‘s£Gƒ9ZN^re‚ZlWOian—zº—©˜uj`Yp|ŠymlP‡]½{Ê•©ˆ|uV‚N—D’CZž‰ayJˆW¨y¨“x‹ibŽY˜p‡zZ¶T©p{|fƒ¢–¡©—°ƒ«o¡d—e‘p–~Š›’”‹‚…l‡X’RœY h›x„‚‚}w€pˆq“zœˆ“•‡wle`V_LkD‚?™D§T§m„‘e…QtJePb`pw…‘”¡˜£˜€‰w„}‰‹“šž¢£Œ–}˜yžƒ¢–¡©—°ƒ…¸t²eŠk€{|g†?{B‘q˜—‚›‡‰—”y¢]˜WƒMpK[JX_i‹h“Ko@]Mg\_dWcrbŠw}œm½±‚‡notz›^}`Q‰b¹‰Ä¬g€YSwPŸU§QŒVog\v[…_©s¼Š§Ÿz‘od”D˜T…}…¸t²eŠk€ˆ«¨±¡»“¼ƒµv«p quŸ{€—~s‡bƒP‚IN€\€l€x€xn„gŠh’qšŸŽ‘€}ne`O]Bi=}=G™[šu–Œ“™‰›t‘^~PiN]Xenvˆ‡˜’›’‘‡‚€{‡~”‰¡˜§¤ ¦¤~¦|©ˆ«¨±¡»“¤©¥€€s†s”€€rJgJ€€‡¦uŸ€€•‹ˆ—€€‹t†…€€llbw€€p{q€€„y€€Ÿ|¢s€€Y¦[§€€}rn€€«X§U€€„£’œ€€PlRh€€­Œ¯…€€Yv_l€€ƒ§}¦€€X£W€€MƒLr€€¤©¥€€s†~¨•¥© ¶™¾½…³|¥t›p™q—u•upˆf~XrOeP`Xeepp}qƒh†_‡]‰eŽu˜…ž‰˜ˆppeXbLnHI‰RŒd‹{‰Žž¦‚ o_wWd]cqoˆ•–“ŠŒz†pŒo—x¡ˆ¢™˜£ƒ¥s¨qª~¨•¥© ¶™‹«¡Ÿ£uŒsj{elgBiJƒ€——”~–`¢x˜‘Ž‰•Ž– “pxZƒs˜‘™“§¢­¡ž‰·„¡im\MwXŠ|€s}e’zŸ©x¬Zˆp‡†—n’RldcŒª¢³ž²p¬RŠc[ˆV~ofmeW”K´^¢‚l€Ptg†‹«¡Ÿ£uŒsj›–•“¥”²“¶Ž¯†Ÿ|r‹pŒtyŽzˆv|kf`Q\I_Qgfp|r†i‡]‚X~]kŠ}™…€•u„lpkexa…]‡`ƒk}{|Œ†¬Œ®€¡r‰hsljn’z›ˆ—ˆŠw„jŠc“g™t—†Š”sšaž^žj›–•“¥”c³z­œ„”qqkpb€H€RŽƒ¯±q™i“„Ž“|®†³€XcLelŽ“¡Œ«›ž¡‰…—x½Š­~s_ZWopuŠd‰}™¨‹¢ixpp|†bœU‰‚q©oª‰«²k©M‚X\vSkP]NoV¢l¹…§‘ƒ€dv_Žc³z­œ„”qW†l€€… Œ§¡‘‰€€z|€€‰†ŽŠŒ‰€€ftNnDoMve}€€‹vˆh_vatm€€“‰Ÿ… |—sˆs€€y‹o‰ijvrt€€”Ž¨‘²‹«‚—{€€s‘q¢w¨€¢…‘€€zo€bŠ]dŽr€€g‡S‹MŠW†l€€…c§\¥€€ˆpvx€€c€\€€¦ˆ§v€€x‘‡‚€€w©…¬€€XKXK€€“ˆŠv€€p”e‡€€µ¡µ¥€€cXmZ€€f|^n€€¬‰¨w€€fi}€€‡¥ƒ¤€€•|›Š€€alfu€€rmfi€€¦– ’€€zhc€€c§\¥€€ˆpEvWtitz|ŠŠ’—ž~m•it„“’”˜‡w}`zV]ˆsŒ’•‡w‚ntom|uŽˆ—˜’ ‡ }š{–‡Ž‘}Œmcrbllvƒ‡Ž®¯‰¡…Œ‰|˜s¨q°q­p¡i’fpm~^‰Y‰]|fcnKt@wEvWtitz|upSpb]lqaŸf³hSxSŽqxmfmp|sšw£”²¦h}InM‚qvddNfPc‰~Š ¤¬µ“¥nQfJiMhik{©«†›ž‰ w†u‡ƒ™}²S¶T¦fjŠyž¡³³˜¡{”‹˜ª˜›ua~E›>¢VupSpb]lq6oCsRuc€v“€¤}¯o°^¨ZŸg™~••‘¤‹¢‚|zo‰t•†›œ£Žœ~Šuuyfˆfœu¤…Ÿ““žˆ¤…¨¡™‹r^lUc[jt|•‡­Œ´Š«†™‡†‘ui§`ªZ¨R£S”c|vd„R‡J{M`WEa6i6oCsRuc€lRSR[`d‹e±_³Q—GˆQ˜X[lidzo‡s—…ºŽÃu¦bˆdydtfkj^fO_\l{}€zw~ˆ™œ©ˆ¥_Jrbm‰~˜…o€”¤©—Ÿx†{†’i°R§R‰Z„p¤š··³²”¬¤“±…¨€‡jF¤@šRlRSR[`d‹1q;zHYŠmžy°x¹k¸Z®S¡_–v‘‡§€¬xžwŽ€„Ž†š’¡£œ«Š¥x“q{yfŒ^¢eªo¤~˜ Š­•©““w^jQ]Ubpu“„­Œ·Š°„Ÿ€Š‚uˆc‘VšN£H¨M `Švn†U‰E|DaMEZ3f1q;zHYŠbmld€€ˆ¢Œ€€lmmm€€s‚g{€€‰}ws€€¬Š©~€€w”ƒ€€y„ƒ‰€€…€“Š€€Wh\m€€‹š†¢€€Žv’‰€€YYT`€€ªx¥n€€ee„€€zvli€€¥§Ÿ¡€€fŠc—€€ v‰€€‡_”i€€bmld€€ˆ¢9yD‚Qˆa”u¦´¹t³b¥W•[ˆl…zw§q s”€Œ‹š“œ ’ª}©jœd†nn…aœ]¥^ g•y‹ˆ£“¤›”“|emX`]dxw˜ˆ¯¶­ƒ›x‡rqoatWR’O¡W¡k“€|dŒQ~MdUJa:m9yD‚Qˆa”“‰¡š¤˜¬vŸ]SI±L¡^Œu‘†‰wvW„S¡r†SœV«v²„¦Œ¤¨±°²¯¬¦­ƒ¨O’Eyel‹z¬€´g¢fz_vWQaYzx“zyoƒJ‹A]Ÿj ju‘Š¥z•Ws:{;Š_v†n‚xxƒi™‡ŽŸ“‰¡š¤˜LZ…g‹v–‰¦”¯“®…£q’b‚\wcqurŠt–r“uŒƒ…ƒ—ˆ”’…Ÿm¦X¢Q“]~vnŽ`˜U”U‹b‚y€Š—”€ƒptgkno‡‚¢“²š±•¢†Žv|hl\cZafd{fn™€–Š—y‘i€egkRrHyLZ…g‹v––‰£–˜›“r¢U™dŠq ^±LªX¢k’trjlXŽQ r€˜Q–M–a§s …¤ ²³º¦¯ž†¨O´D n{žm¹k´`jeƒev‡XizŠ}’‰‰|vJc=nb—€·}±j˜s˜t•\ƒ4€5…apkž‰uŽpž˜––‰£–˜›“r^}q}€€Ž‹Ÿš¨¢¤Ÿ”’€€lq^k\meut~€€‚yt—r™v‘€€ežN¤EŸOg€€m‰Y†P~Vviu€€‹ŒŠ‚‡y~vy€€–‘«¢³©«¢–‘€€plgYgPoWzj€€‡Ž••ž“ž‹“€€i‚X‚T^}q}€€Ž‹‡s•„€€vO‰N€€jŸx–€€…’ƒ€€R~T€€ž‘šœ€€pur‡€€„aj€€˜q k€€K¨K©€€£nœy€€d‰]•€€´^´f€€s“…™€€OTOQ€€¨­£ª€€„y‘…€€P~PŒ€€£zž‹€€~x†Š€€‡s•„€€vOhp{fŠe˜p¨±‰¬ˆœ}‡mrbacZn^}h‹pnf—_ž\ž_”h‚yhP›DžK—^Œs{zfvZn\fje~oŠ|Š„„ˆ}Šzƒ––§¥·§½š·‚§l–`_ggWvU†bv’‡ž’¥—£—–”‚•m•^Œ\hp{fŠe˜p}{˜„p‚J†[s•R®V¦fš}Ÿ”•‰\•^¦|£™˜¥”|„}‡Ž‰‡r{nvv€n…nw}`—j“f§X‹r`ˆO‰f‡šrº`¤fmpj{„Š†‰fgf]‚¤¢¹”±r«j©aœR‚a„€£|±|™šxŸz‹„sy}{˜„p‚JiezQ‡K•V§d±m®mŸeŠXvSf[_la€hŽleX—LžFŸH–Q…alvV‡K‘N“[h„judj\jVuU†\iw†…|”v¡{­‰¼’ÊЀÊi»V¬P•Vvd_wW‡^p‘‚œ¤™¥ž› Š¥u¥d–`~iezQ‡K•V‚š™ž™vPŒbqšE Go›žª‹Œvx’«Š›’qšd‡|x‘€™•v–€ˆ‰vˆkŒzŒ“•‹g«K–ZivOujmŸh¬{ŒŠc€kf‰e”|vŠl|„|—›†²~¤€—fžP©eªy¨o¦n—Š¥”Œ—r‚w‚š™ž™vPfbsI~AŒJŸU«\«]W‰NwNl[iolqŒqŠd‡RC—<›?–H†Upd`sXZ‡a‹f‰aY{R{NOŽS–\”l‰€|–q©q·zÃ}ÏxÔkÏZÃLµKžV~fdwY„_…p‡‚’ž—£œž ©z«iœafbsI~AŒJt´€´€€„P’S€€LKq€€¯œ­’€€v™‚¡€€€KJ€€s—ƒŠ€€mv€€cƒ[ˆ€€ˆ“”€€˜[¡a€€SWy€€”Ÿ€€~W€W€€‘ƒ›s€€_‹gy€€s•jŠ€€œ‘–“€€zn{p€€p–e€€t´€´€€„PbklSuKƒR—Y¤]¥]™Y…TvXpfswz„ˆzh|T„EŽA•F“P…Xs_jgholyoƒkŠ`ŠWˆS‡S‰V’X™[–gŒy}Žp£l¯p¹pÂlÇdÃZ¹S­U˜azocz[c|u{…†”œ‘œ”Ÿ|¦i`‡bklSuKƒRg”\OhlMœP›hhea`q°Œ¥œ¦zº©|vzB…>ƒl‰v¥_ªV”q~ovPmI]jL|hn“dŒŽj©n‘ˆf”Z h¦« œ±¨_‹]r~‰œ|›{wtaejvk l³€³ˆ·j¨OŒMrKkQvfkwarrg”\OhlM`}jktei”m¡o¡m•jgsmsz{†„‹‰‡‚{nuZ{O‡Q[g‚jtgrewg}o}vŠg_Ž^Šcˆii•f•iŽr‚€vp™q p©n­kªi¢g—l…vl\ƒZ€gw|uŠ~ŒŠˆ”ƒ•‚‹w›f›^`}jkteimciN`un¢zŸmvZq[–f©f{Ž “”±w{FoAzc”c§R­Y°€Ÿ’~‰WwJ\bLel`”o‰¢gµh˜v„Š}¦q¢f†Ž°ºv¦dƒpv…”Ÿ~ZqUw}‰­‰¿³…­_šR}ThKrT‰d€nk}fmciN`ungŽuƒ€€Œƒœ†¦†¤„•€€s…s{—…—‰Ž€€lx\}X‡aŽq€€€txuolˆq‹€€o‘il„v}€€‰wpo‹r„y€€†~Ž~“~‘‰€€…o\“R’V‹h€€{ŒŠ‡Œx‹u€€n‘a™_˜gŽuƒ€€Œƒ–z‹w€€–žš¥€€]g]s€€Œa‚[€€Š³‡³€€mWd]€€”z‰o€€šŸ—€€_{c~€€u“iž€€­e©q€€Œ‘–€€TdXl€€žwŸs€€^¡]§€€€KrK€€“¥‡Ÿ€€~…tŽ€€„fwj€€‚…s„€€–z‹w€€–žwžŒ™™—¤š°œµœ®š—‰”{˜w¡y¦}¤~›u‹f‚\„]‰jŒ}ˆŒzŒoƒsz€uŽy•‡•~–z~‡srŽ{ƒ„w‹ompŒtŒy~ŽŽzŽpŽf‘Y—KšH™S’iˆ‚€Ž…zyun|a^šf wžŒ™™—¤š{´‰®Š¨Œ¶vµT”7w@j’|xvw‹ƒ¨œvwpouŽ‡²€Ÿ]LŠeœn„WlVv†ˆ¯˜¬‚¦„z›kŒ„a”^“z—„‡ib_LgJy_{`²:Â5µS‡WRPDacztqe_Lcls¡†¬Œ‰YN€fc•a³{´‰®Š¨Œ¶ \ No newline at end of file diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh new file mode 100644 index 0000000..b48472d --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_noise.fsh @@ -0,0 +1,39 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..f255eb8 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_normals.fsh @@ -0,0 +1,33 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..93b416b --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.fsh @@ -0,0 +1,433 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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.03 +#define WATER_F0 0.6 + +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.1, 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 = sqrt(dot(v_position4f.xyz, 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 new file mode 100644 index 0000000..cd6e01d --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/realistic_water_render.vsh @@ -0,0 +1,80 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..8feaccf --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_control.fsh @@ -0,0 +1,236 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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_position2f, 0.0).r; + + if(fragDepth < 0.000001) { + return; + } + + vec4 fragClipSpacePos4f = vec4(v_position2f, 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 new file mode 100644 index 0000000..f6c1e32 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/reproject_ssr.fsh @@ -0,0 +1,110 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..1b0f1d1 Binary files /dev/null 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 new file mode 100644 index 0000000..75294c2 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/shader_pack_info.json @@ -0,0 +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.0.0", + "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 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh new file mode 100644 index 0000000..9b2ef53 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/shadows_sun.fsh @@ -0,0 +1,168 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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.dat b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox.dat new file mode 100644 index 0000000..7d258a9 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox.dat differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh new file mode 100644 index 0000000..6bd4acf --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_atmosphere.fsh @@ -0,0 +1,126 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..d6d8f11 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_irradiance.fsh @@ -0,0 +1,231 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..809ce2a --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.fsh @@ -0,0 +1,60 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh new file mode 100644 index 0000000..d3017a2 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render.vsh @@ -0,0 +1,49 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..91b8ef0 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.fsh @@ -0,0 +1,45 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec3 v_position3f; + +layout(location = 0) out vec4 output4f; + +#define SKY_BRIGHTNESS 0.015 + +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 new file mode 100644 index 0000000..77b5786 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/skybox_render_end.vsh @@ -0,0 +1,33 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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 new file mode 100644 index 0000000..bb2702b --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_generate.fsh @@ -0,0 +1,96 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +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, u_randomizerDataMatrix2f * (v_position2f + originalViewSpacePos.xy + normal3f.xz), 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/ssao_noise.bmp b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_noise.bmp new file mode 100644 index 0000000..22acc00 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/ssao_noise.bmp differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/temperatures.lut b/desktopRuntime/resources/assets/eagler/glsl/deferred/temperatures.lut new file mode 100644 index 0000000..eb2ec87 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/glsl/deferred/temperatures.lut differ diff --git a/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv b/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv new file mode 100644 index 0000000..ad3d472 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/deferred/vertex_ids.csv @@ -0,0 +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 diff --git a/desktopRuntime/resources/assets/eagler/glsl/local.vsh b/desktopRuntime/resources/assets/eagler/glsl/local.vsh new file mode 100644 index 0000000..05e350e --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/local.vsh @@ -0,0 +1,28 @@ +#line 2 + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +precision lowp int; +precision highp float; +precision lowp 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/post_fxaa.fsh b/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh new file mode 100644 index 0000000..be20844 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/post_fxaa.fsh @@ -0,0 +1,371 @@ +#line 2 + +// Remove this line below if you plan to modify this file +#define USE_OPTIMIZED + + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + + +/* + * 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 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) textureLod(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; + + output4f = 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; +vec4 _617; + +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 = textureLod(u_screenTexture, _611.xy, 0.0).xyz; + mediump float _536 = dot(_532 * _532, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); + mediump vec3 _540 = textureLod(u_screenTexture, _611.xw, 0.0).xyz; + mediump float _544 = dot(_540 * _540, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); + mediump vec3 _548 = textureLod(u_screenTexture, _611.zy, 0.0).xyz; + mediump vec3 _556 = textureLod(u_screenTexture, _611.zw, 0.0).xyz; + mediump float _560 = dot(_556 * _556, vec3(0.2989999949932098388671875, 0.58700001239776611328125, 0.114000000059604644775390625)); + mediump vec4 _390 = textureLod(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 = textureLod(u_screenTexture, mp_copy_614 * _454 + _290, 0.0) + textureLod(u_screenTexture, _449 * _454 + _290, 0.0); + mediump vec4 _505 = ((textureLod(u_screenTexture, mp_copy_615 * _484 + _290, 0.0) + textureLod(u_screenTexture, _481 * _484 + _290, 0.0)) * 0.25) + (_498 * 0.25); + mediump 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; + } + output4f = vec4(_608.xyz, 1.0); +} + +#endif \ No newline at end of file diff --git a/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh new file mode 100644 index 0000000..9f82680 --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.fsh @@ -0,0 +1,45 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_texCoords2f; + +#ifndef COMPILE_BLIT_DEPTH +layout(location = 0) out vec4 output4f; +#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 + output4f = textureLod(u_inputTexture, uv2f, u_textureLod1f); +#else + gl_FragDepth = textureLod(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 new file mode 100644 index 0000000..fd5f9bf --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/texture_blit.vsh @@ -0,0 +1,32 @@ +#line 2 + +/* + * Copyright (c) 2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +precision lowp int; +precision lowp float; +precision lowp sampler2D; + +layout(location = 0) in vec2 a_position2f; + +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; + gl_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 new file mode 100644 index 0000000..bbe93fe --- /dev/null +++ b/desktopRuntime/resources/assets/eagler/glsl/texture_mix.fsh @@ -0,0 +1,35 @@ +#line 2 + +/* + * Copyright (c) 2022-2023 LAX1DUDE. All Rights Reserved. + * + * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES + * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED + * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE + * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. + * + * NOT FOR COMMERCIAL OR MALICIOUS USE + * + * (please read the 'LICENSE' file this repo's root directory for more info) + * + */ + +precision lowp int; +precision highp float; +precision highp sampler2D; + +in vec2 v_position2f; + +layout(location = 0) out vec4 output4f; + +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 = textureLod(u_inputTexture, coords.xy, u_textureLod1f); + output4f = 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 new file mode 100644 index 0000000..7bc85e6 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/gui/eagler_gui.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/01.default_steve.png b/desktopRuntime/resources/assets/eagler/skins/01.default_steve.png new file mode 100644 index 0000000..86ec331 Binary files /dev/null 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 new file mode 100644 index 0000000..b643fe2 Binary files /dev/null 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 new file mode 100644 index 0000000..2b21235 Binary files /dev/null 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 new file mode 100644 index 0000000..3f6abf7 Binary files /dev/null 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 new file mode 100644 index 0000000..9eb5f5a Binary files /dev/null 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 new file mode 100644 index 0000000..a0258ab Binary files /dev/null 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 new file mode 100644 index 0000000..8dda96d Binary files /dev/null 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 new file mode 100644 index 0000000..a67a3c8 Binary files /dev/null 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 new file mode 100644 index 0000000..c65409f Binary files /dev/null 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 new file mode 100644 index 0000000..20461a7 Binary files /dev/null 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 new file mode 100644 index 0000000..6975f65 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/skins/11.boxer_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/12.boxer_alex.png b/desktopRuntime/resources/assets/eagler/skins/12.boxer_alex.png new file mode 100644 index 0000000..cb20ba3 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/skins/12.boxer_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/13.prisoner_steve.png b/desktopRuntime/resources/assets/eagler/skins/13.prisoner_steve.png new file mode 100644 index 0000000..bbc6968 Binary files /dev/null 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 new file mode 100644 index 0000000..a81c05f Binary files /dev/null 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 new file mode 100644 index 0000000..e78c739 Binary files /dev/null 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 new file mode 100644 index 0000000..a73a931 Binary files /dev/null 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 new file mode 100644 index 0000000..652a7c4 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/skins/17.developer_steve.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/18.developer_alex.png b/desktopRuntime/resources/assets/eagler/skins/18.developer_alex.png new file mode 100644 index 0000000..9db32e3 Binary files /dev/null and b/desktopRuntime/resources/assets/eagler/skins/18.developer_alex.png differ diff --git a/desktopRuntime/resources/assets/eagler/skins/19.herobrine.png b/desktopRuntime/resources/assets/eagler/skins/19.herobrine.png new file mode 100644 index 0000000..9ce121f Binary files /dev/null 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 new file mode 100644 index 0000000..374923f Binary files /dev/null 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 new file mode 100644 index 0000000..a71add5 Binary files /dev/null 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 new file mode 100644 index 0000000..3b6fd16 Binary files /dev/null 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 new file mode 100644 index 0000000..ad08bb5 Binary files /dev/null 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 new file mode 100644 index 0000000..e32b9b0 Binary files /dev/null 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 new file mode 100644 index 0000000..6ef5a57 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_door.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..8394a73 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_double_slab.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..fe9887b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..c18d825 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_fence_gate.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..2ea28dc --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_leaves.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..bba37a7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_log.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/acacia_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_planks.json new file mode 100644 index 0000000..8394a73 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_planks.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..a2c961f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_sapling.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..b0640a9 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..13c597f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/acacia_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..a86fd69 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/activator_rail.json @@ -0,0 +1,16 @@ +{ + "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 new file mode 100644 index 0000000..88521a6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/allium.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "allium" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/andesite.json b/desktopRuntime/resources/assets/minecraft/blockstates/andesite.json new file mode 100644 index 0000000..15b6b38 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/andesite.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "andesite" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/anvil.json b/desktopRuntime/resources/assets/minecraft/blockstates/anvil.json new file mode 100644 index 0000000..c592bac --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/anvil.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/beacon.json b/desktopRuntime/resources/assets/minecraft/blockstates/beacon.json new file mode 100644 index 0000000..b97af99 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/beacon.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "beacon" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/bed.json b/desktopRuntime/resources/assets/minecraft/blockstates/bed.json new file mode 100644 index 0000000..0695774 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/bed.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/bedrock.json b/desktopRuntime/resources/assets/minecraft/blockstates/bedrock.json new file mode 100644 index 0000000..4070fc5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/bedrock.json @@ -0,0 +1,10 @@ +{ + "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 new file mode 100644 index 0000000..58de25c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_door.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..7c7d4f2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_double_slab.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..d21d31c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..21f5f49 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_fence_gate.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..c3fcb28 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_leaves.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..8ebb352 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_log.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/birch_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/birch_planks.json new file mode 100644 index 0000000..7c7d4f2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_planks.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..3a65405 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_sapling.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..967ddcb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..68bbf3e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/birch_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..61e62f1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..6ffc12a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..c337d9b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..4bde9c2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..728ba54 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/black_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..d93906b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..a2e9806 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_orchid.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ad618dd --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..2613bd5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..aadb0f6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..3cfcf7f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/blue_wool.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "blue_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/bookshelf.json b/desktopRuntime/resources/assets/minecraft/blockstates/bookshelf.json new file mode 100644 index 0000000..175c626 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/bookshelf.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "bookshelf" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brewing_stand.json b/desktopRuntime/resources/assets/minecraft/blockstates/brewing_stand.json new file mode 100644 index 0000000..0f1c7eb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brewing_stand.json @@ -0,0 +1,12 @@ +{ + "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 new file mode 100644 index 0000000..8afbf8f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brick_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ceb2e14 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brick_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..7bdc95e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brick_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..1b39369 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brick_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..e5fd2d7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ef1d42f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..7b1cb8c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_mushroom_block.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass.json new file mode 100644 index 0000000..81d4846 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..575852e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..31e344e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..112805f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/brown_wool.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "brown_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cactus.json b/desktopRuntime/resources/assets/minecraft/blockstates/cactus.json new file mode 100644 index 0000000..3212cd1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cactus.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "cactus" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cake.json b/desktopRuntime/resources/assets/minecraft/blockstates/cake.json new file mode 100644 index 0000000..c0c4af2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cake.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/carrots.json b/desktopRuntime/resources/assets/minecraft/blockstates/carrots.json new file mode 100644 index 0000000..96a5347 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/carrots.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cauldron.json b/desktopRuntime/resources/assets/minecraft/blockstates/cauldron.json new file mode 100644 index 0000000..885af8f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cauldron.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..ea2566b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_brick_monster_egg.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..46748b1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_quartz_block.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..f947ad8 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_red_sandstone.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..96fbad3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_sandstone.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ea2566b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/chiseled_stonebrick.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "stonebrick_chiseled" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/clay.json b/desktopRuntime/resources/assets/minecraft/blockstates/clay.json new file mode 100644 index 0000000..3fcd74f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/clay.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "clay" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/coal_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/coal_block.json new file mode 100644 index 0000000..7ac479e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/coal_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..cc2ca2d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/coal_ore.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..25e19be --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/coarse_dirt.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "coarse_dirt" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone.json b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone.json new file mode 100644 index 0000000..57bc457 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..0e4e165 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..57bc457 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_monster_egg.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "cobblestone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_slab.json b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_slab.json new file mode 100644 index 0000000..a55a4f3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..aa0b9f5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cobblestone_wall.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..9eda2fd --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cocoa.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/command_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/command_block.json new file mode 100644 index 0000000..3becb01 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/command_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..58adbf2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cracked_brick_monster_egg.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..58adbf2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cracked_stonebrick.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ef1590a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/crafting_table.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..dd9fc91 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..388279f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..4415599 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..c67b33b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..db589f3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/cyan_wool.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "cyan_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dandelion.json b/desktopRuntime/resources/assets/minecraft/blockstates/dandelion.json new file mode 100644 index 0000000..6d49256 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dandelion.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..4681e94 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_door.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..0dd3e06 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_double_slab.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..266580a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..011e1f5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_fence_gate.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..bb68195 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_leaves.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ff01aec --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_log.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_planks.json new file mode 100644 index 0000000..0dd3e06 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_planks.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..6d1d2e9 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_sapling.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..9b0ed64 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..e920d6d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_oak_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..7f87a8d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dark_prismarine.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..862d7a9 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector_inverted.json b/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector_inverted.json new file mode 100644 index 0000000..55de23b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/daylight_detector_inverted.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dead_bush.json b/desktopRuntime/resources/assets/minecraft/blockstates/dead_bush.json new file mode 100644 index 0000000..faa7eae --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dead_bush.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..d5146b1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/detector_rail.json @@ -0,0 +1,16 @@ +{ + "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 new file mode 100644 index 0000000..d8db9e5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/diamond_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ba58d55 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/diamond_ore.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "diamond_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/diorite.json b/desktopRuntime/resources/assets/minecraft/blockstates/diorite.json new file mode 100644 index 0000000..5c6f010 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/diorite.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "diorite" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dirt.json b/desktopRuntime/resources/assets/minecraft/blockstates/dirt.json new file mode 100644 index 0000000..16816dd --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dirt.json @@ -0,0 +1,10 @@ +{ + "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 new file mode 100644 index 0000000..fb58738 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dispenser.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/double_fern.json b/desktopRuntime/resources/assets/minecraft/blockstates/double_fern.json new file mode 100644 index 0000000..9b2ad6a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/double_fern.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..d0971c6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/double_grass.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..cf008d0 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/double_rose.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..16fdcfd --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dragon_egg.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "dragon_egg" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/dropper.json b/desktopRuntime/resources/assets/minecraft/blockstates/dropper.json new file mode 100644 index 0000000..41cc1d4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/dropper.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/emerald_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/emerald_block.json new file mode 100644 index 0000000..325f828 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/emerald_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..816e2b5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/emerald_ore.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..3389236 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/enchanting_table.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..e44bada --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/end_portal_frame.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/end_stone.json b/desktopRuntime/resources/assets/minecraft/blockstates/end_stone.json new file mode 100644 index 0000000..cdaef3b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/end_stone.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "end_stone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/farmland.json b/desktopRuntime/resources/assets/minecraft/blockstates/farmland.json new file mode 100644 index 0000000..7897855 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/farmland.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/fence.json b/desktopRuntime/resources/assets/minecraft/blockstates/fence.json new file mode 100644 index 0000000..fc69adf --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/fence.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..043d21e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/fence_gate.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..bac4186 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/fern.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "fern" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/fire.json b/desktopRuntime/resources/assets/minecraft/blockstates/fire.json new file mode 100644 index 0000000..79fd5fe --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/fire.json @@ -0,0 +1,196 @@ +{ + "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 new file mode 100644 index 0000000..0658f2e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/flower_pot.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/furnace.json b/desktopRuntime/resources/assets/minecraft/blockstates/furnace.json new file mode 100644 index 0000000..7d68539 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/furnace.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/glass.json b/desktopRuntime/resources/assets/minecraft/blockstates/glass.json new file mode 100644 index 0000000..21f793e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/glass.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "glass" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/glass_pane.json b/desktopRuntime/resources/assets/minecraft/blockstates/glass_pane.json new file mode 100644 index 0000000..c5abaf3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..bb47454 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/glowstone.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "glowstone" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gold_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/gold_block.json new file mode 100644 index 0000000..3845d23 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gold_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ce4930d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gold_ore.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ca4cb41 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/golden_rail.json @@ -0,0 +1,16 @@ +{ + "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 new file mode 100644 index 0000000..d1cb8c1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/granite.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "granite" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/grass.json b/desktopRuntime/resources/assets/minecraft/blockstates/grass.json new file mode 100644 index 0000000..e9576b4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/grass.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gravel.json b/desktopRuntime/resources/assets/minecraft/blockstates/gravel.json new file mode 100644 index 0000000..6cbcc83 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gravel.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "gravel" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/gray_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/gray_carpet.json new file mode 100644 index 0000000..fb48eae --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..9163453 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..01e0e1c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..272d95b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..7c90870 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/gray_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..265b564 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..e7bc0f2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..e076758 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..6fb1f6c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..34d84e7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/green_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..cb38687 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..a9d77c2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/hay_block.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..11e524c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/heavy_weighted_pressure_plate.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/hopper.json b/desktopRuntime/resources/assets/minecraft/blockstates/hopper.json new file mode 100644 index 0000000..24f5305 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/hopper.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/houstonia.json b/desktopRuntime/resources/assets/minecraft/blockstates/houstonia.json new file mode 100644 index 0000000..655ba02 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/houstonia.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "houstonia" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/ice.json b/desktopRuntime/resources/assets/minecraft/blockstates/ice.json new file mode 100644 index 0000000..8012231 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/ice.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "ice" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/iron_bars.json b/desktopRuntime/resources/assets/minecraft/blockstates/iron_bars.json new file mode 100644 index 0000000..38751df --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_bars.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..eca5c0d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ceb809e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_door.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..3365f5e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_ore.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..13c116e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/iron_trapdoor.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..b7bbebb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/item_frame.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..6e6d0da --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jukebox.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "jukebox" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_door.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_door.json new file mode 100644 index 0000000..5988133 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_door.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..5c863ec --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_double_slab.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..6709e58 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..c82ebd1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_fence_gate.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..e1f30d9 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_leaves.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..e710e2f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_log.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/jungle_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_planks.json new file mode 100644 index 0000000..5c863ec --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_planks.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..5439171 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_sapling.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..07b026f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..18f8c10 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/jungle_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..8e6c6d6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/ladder.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lapis_block.json b/desktopRuntime/resources/assets/minecraft/blockstates/lapis_block.json new file mode 100644 index 0000000..1421db7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lapis_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..2ab096e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lapis_ore.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "lapis_ore" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lever.json b/desktopRuntime/resources/assets/minecraft/blockstates/lever.json new file mode 100644 index 0000000..5678f68 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lever.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_carpet.json new file mode 100644 index 0000000..4337685 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ddea4a4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..83c54f4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..f579a42 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..018e28f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_blue_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..0d07c34 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/light_weighted_pressure_plate.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lime_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/lime_carpet.json new file mode 100644 index 0000000..f9ac304 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..8f747f7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..6655112 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..1fcba4b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..31849a6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lime_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..42aaa48 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lit_furnace.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lit_pumpkin.json b/desktopRuntime/resources/assets/minecraft/blockstates/lit_pumpkin.json new file mode 100644 index 0000000..bf1c4c4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lit_pumpkin.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_lamp.json b/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_lamp.json new file mode 100644 index 0000000..bf419c9 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_lamp.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..c324279 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/lit_redstone_ore.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..859951c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..173e017 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..02aa3ca --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..f380de6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..86d8c5f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/magenta_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..68909f1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/melon_block.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "melon" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/melon_stem.json b/desktopRuntime/resources/assets/minecraft/blockstates/melon_stem.json new file mode 100644 index 0000000..44519d6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/melon_stem.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/mob_spawner.json b/desktopRuntime/resources/assets/minecraft/blockstates/mob_spawner.json new file mode 100644 index 0000000..a90c112 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mob_spawner.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..5a220cd --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_brick_monster_egg.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..8c2387a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..063a33a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_cobblestone_wall.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..5a220cd --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mossy_stonebrick.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "stonebrick_mossy" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/mycelium.json b/desktopRuntime/resources/assets/minecraft/blockstates/mycelium.json new file mode 100644 index 0000000..015296d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/mycelium.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..c43139d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..245f834 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..59d5ddd --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_fence.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..f240d08 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..178446a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_brick_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..64c5d34 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/nether_wart.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/netherrack.json b/desktopRuntime/resources/assets/minecraft/blockstates/netherrack.json new file mode 100644 index 0000000..2c1f936 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/netherrack.json @@ -0,0 +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 } + ] + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/noteblock.json b/desktopRuntime/resources/assets/minecraft/blockstates/noteblock.json new file mode 100644 index 0000000..e7bc8e6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/noteblock.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..1af29d1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_double_slab.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..fb78614 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_leaves.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..583f957 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_log.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/oak_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/oak_planks.json new file mode 100644 index 0000000..1af29d1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_planks.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..177b4bb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_sapling.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..80d06ee --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..a51a893 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oak_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..0221843 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/obsidian.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "obsidian" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/orange_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/orange_carpet.json new file mode 100644 index 0000000..36716cb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..57cf8d4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..6e17402 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..c242910 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..7c9ba20 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_tulip.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..6aeda3a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/orange_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..178c10a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/oxeye_daisy.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "daisy" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/packed_ice.json b/desktopRuntime/resources/assets/minecraft/blockstates/packed_ice.json new file mode 100644 index 0000000..c0de5b2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/packed_ice.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "packed_ice" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/paeonia.json b/desktopRuntime/resources/assets/minecraft/blockstates/paeonia.json new file mode 100644 index 0000000..f96923b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/paeonia.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..d040f3d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..14d9fcf --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..f410c0d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..d9ca1c6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..5902262 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_tulip.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..fcdaa96 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pink_wool.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "pink_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/piston.json b/desktopRuntime/resources/assets/minecraft/blockstates/piston.json new file mode 100644 index 0000000..7c40cc7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/piston.json @@ -0,0 +1,16 @@ +{ + "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 new file mode 100644 index 0000000..e3014a0 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/piston_head.json @@ -0,0 +1,28 @@ +{ + "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 new file mode 100644 index 0000000..464924a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/podzol.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..fce0638 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/poppy.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "poppy" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/portal.json b/desktopRuntime/resources/assets/minecraft/blockstates/portal.json new file mode 100644 index 0000000..7fe9eb0 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/portal.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..de8f92d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/potatoes.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/powered_comparator.json b/desktopRuntime/resources/assets/minecraft/blockstates/powered_comparator.json new file mode 100644 index 0000000..9f753e6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/powered_comparator.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..deff0c2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/powered_repeater.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..9de572d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/prismarine.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..1d588d7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/prismarine_bricks.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "prismarine_bricks" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin.json b/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin.json new file mode 100644 index 0000000..f3454bf --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin_stem.json b/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin_stem.json new file mode 100644 index 0000000..90b9d69 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/pumpkin_stem.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/purple_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/purple_carpet.json new file mode 100644 index 0000000..7179f25 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..a55b6ef --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..39c97b3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..b595cb6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..8f4b000 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/purple_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..821966c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..015e0f2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_column.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..c744e7b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..759fb79 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_ore.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..566f0e2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..e127773 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/quartz_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..7d8b5b5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/rail.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/red_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/red_carpet.json new file mode 100644 index 0000000..9c02d56 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..2e43aa3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..5ff4c87 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_mushroom_block.json @@ -0,0 +1,18 @@ +{ + "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 new file mode 100644 index 0000000..a82f518 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sand.json @@ -0,0 +1,10 @@ +{ + "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 new file mode 100644 index 0000000..4ba4ec5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..9f5247d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..aa74a59 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..2862714 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_sandstone_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..7b33fa3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..0c7afab --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..727c74c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..fb1cdab --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_tulip.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..cfb8ed2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/red_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..e22811f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_block.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..195cc9b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_lamp.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..f11fd3b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_ore.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..0b960a8 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_torch.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/redstone_wire.json b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_wire.json new file mode 100644 index 0000000..a933b3e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/redstone_wire.json @@ -0,0 +1,103 @@ +{ + "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 new file mode 100644 index 0000000..93ceec8 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/reeds.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "reeds" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sand.json b/desktopRuntime/resources/assets/minecraft/blockstates/sand.json new file mode 100644 index 0000000..f4be92b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sand.json @@ -0,0 +1,10 @@ +{ + "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 new file mode 100644 index 0000000..eca6919 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..bed0dfc --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..e5ff1c3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..8248b86 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sandstone_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..f1d4b9e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sea_lantern.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..6f58883 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..26061de --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..7994961 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..069acc4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..09da066 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/silver_wool.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "silver_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/slime.json b/desktopRuntime/resources/assets/minecraft/blockstates/slime.json new file mode 100644 index 0000000..7c2bbd6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/slime.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "slime" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/smooth_andesite.json b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_andesite.json new file mode 100644 index 0000000..a48e205 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_andesite.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..213183e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_diorite.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..bc6bda0 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_granite.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..199c137 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_red_sandstone.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..9d65c5d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/smooth_sandstone.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "sandstone_smooth" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/snow.json b/desktopRuntime/resources/assets/minecraft/blockstates/snow.json new file mode 100644 index 0000000..e188504 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/snow.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "snow" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/snow_layer.json b/desktopRuntime/resources/assets/minecraft/blockstates/snow_layer.json new file mode 100644 index 0000000..95cd5b1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/snow_layer.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/soul_sand.json b/desktopRuntime/resources/assets/minecraft/blockstates/soul_sand.json new file mode 100644 index 0000000..b62b807 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/soul_sand.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "soul_sand" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sponge.json b/desktopRuntime/resources/assets/minecraft/blockstates/sponge.json new file mode 100644 index 0000000..dacbb14 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sponge.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..202313d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_door.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..e2d11da --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_double_slab.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..0dd96a4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..ba44f44 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_fence_gate.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..7f03d7d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_leaves.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..f944c58 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_log.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/spruce_planks.json b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_planks.json new file mode 100644 index 0000000..e2d11da --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_planks.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..45a85c5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_sapling.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..c4df009 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..daaf7eb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/spruce_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..276b4da --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sticky_piston.json @@ -0,0 +1,16 @@ +{ + "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 new file mode 100644 index 0000000..481b29a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone.json @@ -0,0 +1,10 @@ +{ + "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 new file mode 100644 index 0000000..7acc6c6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..34fa81a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_monster_egg.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..921ec8c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..a8ed4ca --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_brick_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..0e03643 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_button.json @@ -0,0 +1,16 @@ +{ + "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 new file mode 100644 index 0000000..b14642f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..720da4e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_monster_egg.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..6d014bf --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..4931695 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..df1c462 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stone_stairs.json @@ -0,0 +1,44 @@ +{ + "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 new file mode 100644 index 0000000..34fa81a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/stonebrick.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "stonebrick_normal" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/sunflower.json b/desktopRuntime/resources/assets/minecraft/blockstates/sunflower.json new file mode 100644 index 0000000..1eab20d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/sunflower.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..04cacc2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/syringa.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..f58d568 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/tall_grass.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "tall_grass" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/tnt.json b/desktopRuntime/resources/assets/minecraft/blockstates/tnt.json new file mode 100644 index 0000000..55afd63 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/tnt.json @@ -0,0 +1,10 @@ +{ + "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 new file mode 100644 index 0000000..d3d704e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/torch.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/trapdoor.json b/desktopRuntime/resources/assets/minecraft/blockstates/trapdoor.json new file mode 100644 index 0000000..2918632 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/trapdoor.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..eeecb46 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/tripwire.json @@ -0,0 +1,68 @@ +{ + "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 new file mode 100644 index 0000000..ca09850 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/tripwire_hook.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..247565b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/unlit_redstone_torch.json @@ -0,0 +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 } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_comparator.json b/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_comparator.json new file mode 100644 index 0000000..afc9988 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_comparator.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..e56d79b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/unpowered_repeater.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..db33cdb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/vine.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..f2561bc --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/waterlily.json @@ -0,0 +1,10 @@ +{ + "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 new file mode 100644 index 0000000..1e87e7a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/web.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "web" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/wheat.json b/desktopRuntime/resources/assets/minecraft/blockstates/wheat.json new file mode 100644 index 0000000..4bfe6ae --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wheat.json @@ -0,0 +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" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/blockstates/white_carpet.json b/desktopRuntime/resources/assets/minecraft/blockstates/white_carpet.json new file mode 100644 index 0000000..a3c906d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..1b8ca76 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..04bc326 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..6a8c647 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..96b9b8b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_tulip.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..1176a0b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/white_wool.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..538db7e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_double_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..80d06ee --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wood_old_slab.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..b1ba947 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_button.json @@ -0,0 +1,16 @@ +{ + "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 new file mode 100644 index 0000000..d91869b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_door.json @@ -0,0 +1,36 @@ +{ + "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 new file mode 100644 index 0000000..e34ab2e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/wooden_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..075fbfb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_carpet.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..5396738 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..ae28b55 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_glass_pane.json @@ -0,0 +1,20 @@ +{ + "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 new file mode 100644 index 0000000..3c46d24 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_stained_hardened_clay.json @@ -0,0 +1,5 @@ +{ + "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 new file mode 100644 index 0000000..24ddf68 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/blockstates/yellow_wool.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "yellow_wool" } + } +} diff --git a/desktopRuntime/resources/assets/minecraft/font/glyph_sizes.bin b/desktopRuntime/resources/assets/minecraft/font/glyph_sizes.bin new file mode 100644 index 0000000..69c857e Binary files /dev/null and b/desktopRuntime/resources/assets/minecraft/font/glyph_sizes.bin differ diff --git a/desktopRuntime/resources/assets/minecraft/icons/icon_16x16.png b/desktopRuntime/resources/assets/minecraft/icons/icon_16x16.png new file mode 100644 index 0000000..3066972 Binary files /dev/null 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 new file mode 100644 index 0000000..25f3cf6 Binary files /dev/null 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 new file mode 100644 index 0000000..df88031 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/lang/en_US.lang @@ -0,0 +1,2853 @@ + +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 + +eaglercraft.recording.unsupported=Recording Unsupported! +eaglercraft.recording.stop=Stop Recording +eaglercraft.recording.start=Record Screen... +eaglercraft.soundCategory.voice=Voice + +eaglercraft.resourcePack.prompt.title=What do you want to do with '%s'? +eaglercraft.resourcePack.prompt.text=Tip: Hold Shift to skip this screen when selecting a resource pack! +eaglercraft.resourcePack.prompt.delete=Delete this resource pack +eaglercraft.resourcePack.prompt.add=Select this resource pack +eaglercraft.resourcePack.load.refreshing=Refreshing Resources... +eaglercraft.resourcePack.load.pleaseWait=Please Wait. +eaglercraft.resourcePack.load.loading=Loading resource pack... +eaglercraft.resourcePack.load.deleting=Deleting resource pack... + +eaglercraft.gui.exitKey=Use '%s' to close this screen! +eaglercraft.gui.exitKeyRetarded=Use Backtick (`) to close this screen! + +eaglercraft.menu.forkOnGitlab=Fork on GitLab +eaglercraft.menu.editProfile=Edit Profile + +eaglercraft.editProfile.title=Edit Profile +eaglercraft.editProfile.username=Username +eaglercraft.editProfile.playerSkin=Player Skin +eaglercraft.editProfile.addSkin=Add Skin +eaglercraft.editProfile.clearSkin=Clear List + +eaglercraft.addServer.SSLWarn1=you are on an https: page! +eaglercraft.addServer.SSLWarn2=html5 will only allow wss:// + +eaglercraft.chat.exit=Exit Chat + +eaglercraft.handshakeApprove.plaintext.title=Protocol Warning + +eaglercraft.handshakeApprove.plaintext.body.0=§eThis server's 3rd party login system is +eaglercraft.handshakeApprove.plaintext.body.1=§eusing insecure plain-text password login + +eaglercraft.handshakeApprove.plaintext.body.3=This means your password can be stolen +eaglercraft.handshakeApprove.plaintext.body.4=by who is running this server, and also +eaglercraft.handshakeApprove.plaintext.body.5=any proxy you use to connect to it with + +eaglercraft.handshakeApprove.plaintext.body.7=§7Would you like to continue? + +eaglercraft.handshakeApprove.unsupportedAuth.title=Protocol Unsupported + +eaglercraft.handshakeApprove.unsupportedAuth.body.0=§cThis server's login system is using a +eaglercraft.handshakeApprove.unsupportedAuth.body.1=§cprotocol not supported by this client + +eaglercraft.handshakeApprove.unsupportedAuth.body.3=Please make sure you are using the +eaglercraft.handshakeApprove.unsupportedAuth.body.4=latest version of EaglercraftX or +eaglercraft.handshakeApprove.unsupportedAuth.body.5=another fork made for this server + +eaglercraft.options.hud.fps=Show FPS +eaglercraft.options.hud.coords=Show XYZ +eaglercraft.options.hud.stats=Show Stats HUD +eaglercraft.options.hud.world=Show World HUD +eaglercraft.options.hud.player=Show Player +eaglercraft.options.hud.note=Check 'Video Settings' for the option to hide XYZ +eaglercraft.options.hud.24h=24h Day +eaglercraft.options.chunkFix=Chunk Lag Fix +eaglercraft.options.fog=Fog +eaglercraft.options.fxaa=FXAA Antialiasing +eaglercraft.options.fxaa.auto=Auto +eaglercraft.options.fastMath=Fast Math +eaglercraft.options.fastMath.0=OFF +eaglercraft.options.fastMath.1=Low +eaglercraft.options.fastMath.2=High + +eaglercraft.key.function=Function +eaglercraft.key.zoomCamera=Zoom Camera +eaglercraft.key.close=Close Screen + +eaglercraft.disconnect.tooManyRequests=Too Many Requests! + +eaglercraft.auth.required=Authentication Required +eaglercraft.auth.continue=Join Server + +eaglercraft.shaders.gui.optionsButton=Shaders +eaglercraft.shaders.gui.title=Shaders +eaglercraft.shaders.gui.enable=Enable Shaders +eaglercraft.shaders.gui.headerTier1=Simple Effects (fast) +eaglercraft.shaders.gui.headerTier2=Intermediate Effects (not as fast) + + +eaglercraft.shaders.gui.option.WAVING_BLOCKS.label=Waving Grass + +eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.0=The classic vanilla shader that make grass and leaf blocks move with the wind +eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.2=ON: slower, complex control flow +eaglercraft.shaders.gui.option.WAVING_BLOCKS.desc.3=OFF: faster, simple control flow + +eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.label=Dynamic Lights + +eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.0=Items like torches, glowstone, jack o'lanterns, etc. light up the area around them when they are held or dropped +eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.2=This feature usually does not affect FPS unless there is a large number of dynamic light sources close to the player +eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.4=ON: enable dynamic lights +eaglercraft.shaders.gui.option.DYNAMIC_LIGHTS.desc.5=OFF: disable dynamic lights + +eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.label=Global SSAO + +eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.0=Applies realistic screenspace ambient occlusion (SSAO) to areas of the screen that vanilla Minecraft's default "Smooth Lighting" feature cannot +eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.2=This effect can greatly reduce lag spikes caused by chunk updates in exchange for a decreased maximum FPS when standing still +eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.4=ON: use SSAO +eaglercraft.shaders.gui.option.GLOBAL_AMBIENT_OCCLUSION.desc.5=OFF: use vanilla + +eaglercraft.shaders.gui.option.SHADOWS_SUN.label=Sun Shadow Dist + +eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.0=Makes the sun and moon cast shadows on the world, you almost definitely want to enable this +eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.2=0: off +eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.3=1: 16 blocks +eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.4=2: 32 blocks +eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.5=3: 64 blocks +eaglercraft.shaders.gui.option.SHADOWS_SUN.desc.6=4: 128 blocks + +eaglercraft.shaders.gui.option.SHADOWS_COLORED.label=Color Shadow + +eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.0=Makes blocks like stained glass cast colored shadows +eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.2=ON: colored shadows (slower) +eaglercraft.shaders.gui.option.SHADOWS_COLORED.desc.3=OFF: grayscale shadows (faster) + +eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.label=Smooth Shadow + +eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.0=Smooths out the edges of sun and dynamic light shadows to get rid of aliasing +eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.2=ON: smooth shadows (slower) +eaglercraft.shaders.gui.option.SHADOWS_SMOOTHED.desc.3=OFF: aliased shadows (faster) + +eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.label=Env. Mapping + +eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.0=Renders an environment map, allows transparent blocks and moving entities to reflect their surroundings +eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.2=Uses dual paraboloid mapping, only 2 render passes are required to render all reflections, instead of a full 6 render passes like a conventional cube map +eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.4=ON: render env. map (slower) +eaglercraft.shaders.gui.option.REFLECTIONS_PARABOLOID.desc.5=OFF: disable env. map (faster) + +eaglercraft.shaders.gui.option.REALISTIC_WATER.label=Realistic Water + +eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.0=Makes water realistic, adds reflection and refraction effects, uses raytracing +eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.2=ON: render realistic water (slower) +eaglercraft.shaders.gui.option.REALISTIC_WATER.desc.3=OFF: render vanilla water (faster) + +eaglercraft.shaders.gui.option.LIGHT_SHAFTS.label=God Rays + +eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.0=Render god rays (light shafts) for sunlight and moonlight shadows +eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.2=ON: render god rays (slower) +eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.3=OFF: disable god rays (faster) + +eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.label=Raytracing + +eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.0=Renders raytraced reflections off of blocks +eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.2=Thanks to some advanced optimizations, this feature only has a small impact on FPS and is compatible with old hardware +eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.4=Both raymarching and raytracing are employed, raymarching is initially used to locate and track groups of pixels on the screen to reflect, then raytracing is used to reproject that data between multiple frames so the raymarching process only has to be repeated once or twice every few seconds +eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.6=ON: enable raytracing (slower) +eaglercraft.shaders.gui.option.SCREEN_SPACE_REFLECTIONS.desc.7=OFF: disable raytracing (faster) + +eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.0=Render god rays (light shafts) for sunlight and moonlight shadows +eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.2=ON: render god rays (slower) +eaglercraft.shaders.gui.option.LIGHT_SHAFTS.desc.3=OFF: disable god rays (faster) + +eaglercraft.shaders.gui.option.POST_LENS_DISTORION.label=Lens Distort + +eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.0=Renders chromatic abberation and lens distorion +eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.2=ON: render lens distortion (slower) +eaglercraft.shaders.gui.option.POST_LENS_DISTORION.desc.3=OFF: disable lens distortion (faster) + +eaglercraft.shaders.gui.option.POST_LENS_FLARES.label=Lens Flares + +eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.0=Renders filmic lens flares for the sun +eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.2=ON: render lens flares (slower) +eaglercraft.shaders.gui.option.POST_LENS_FLARES.desc.3=OFF: disable lens flares (faster) + +eaglercraft.shaders.gui.option.POST_BLOOM.label=Bloom + +eaglercraft.shaders.gui.option.POST_BLOOM.desc.0=Renders bloom for emissive textures and sunlight +eaglercraft.shaders.gui.option.POST_BLOOM.desc.2=ON: render bloom (slower) +eaglercraft.shaders.gui.option.POST_BLOOM.desc.3=OFF: disable bloom (faster) + +eaglercraft.shaders.gui.option.POST_FXAA.label=FXAA + +eaglercraft.shaders.gui.option.POST_FXAA.desc.0=Applies FXAA antialiasing in post processing +eaglercraft.shaders.gui.option.POST_FXAA.desc.2=This is the preferred antialiasing method for minecraft, as classical MSAA cannot antialias the pixels of upscaled textures +eaglercraft.shaders.gui.option.POST_FXAA.desc.4=ON: enable fxaa (slower) +eaglercraft.shaders.gui.option.POST_FXAA.desc.5=OFF: disable fxaa (faster) + +eaglercraft.shaders.gui.unsupported.title=Shaders are unavailable on this device! +eaglercraft.shaders.gui.unsupported.reason.hdrFramebuffer=Reason: No HDR render target support + +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 +resourcePack.title=Select Resource Packs +resourcePack.available.title=Available Resource Packs +resourcePack.selected.title=Selected Resource Packs +resourcePack.folderInfo=(Select resource pack files here) +resourcePack.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=Stained Clay +tile.clayHardenedStained.black.name=Black Stained Clay +tile.clayHardenedStained.red.name=Red Stained Clay +tile.clayHardenedStained.green.name=Green Stained Clay +tile.clayHardenedStained.brown.name=Brown Stained Clay +tile.clayHardenedStained.blue.name=Blue Stained Clay +tile.clayHardenedStained.purple.name=Purple Stained Clay +tile.clayHardenedStained.cyan.name=Cyan Stained Clay +tile.clayHardenedStained.silver.name=Light Gray Stained Clay +tile.clayHardenedStained.gray.name=Gray Stained Clay +tile.clayHardenedStained.pink.name=Pink Stained Clay +tile.clayHardenedStained.lime.name=Lime Stained Clay +tile.clayHardenedStained.yellow.name=Yellow Stained Clay +tile.clayHardenedStained.lightBlue.name=Light Blue Stained Clay +tile.clayHardenedStained.magenta.name=Magenta Stained Clay +tile.clayHardenedStained.orange.name=Orange Stained Clay +tile.clayHardenedStained.white.name=White Stained Clay +tile.clayHardened.name=Hardened Clay +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=Brewing +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/models/block/acacia_bark.json b/desktopRuntime/resources/assets/minecraft/models/block/acacia_bark.json new file mode 100644 index 0000000..2ae3fc4 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_bark.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..0c5951e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..f918660 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_bottom_rh.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..1214f3b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..d706f36 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_door_top_rh.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..8e317cc --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_closed.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..16234a2 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..e390a8a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..54a17dc --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_n.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..0f1c10d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ne.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..4098444 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_ns.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..67fe693 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nse.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..8e11585 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_nsew.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..bc78d2f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_fence_post.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..727e10e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..8f7f654 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_leaves.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..9ca2062 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_log.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..7547c14 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_log_side.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..689009b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..514b5df --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_planks.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..0ac2f33 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_sapling.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..9496b30 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_stairs.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..663ff1a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_closed.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..21706f6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/acacia_wall_gate_open.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..c35d708 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_flat.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..dc90395 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_ne.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..e70658d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_active_raised_sw.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..61a8f21 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_flat.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..721d80d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_ne.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..32f04b5 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/activator_rail_raised_sw.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..e7485ac --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/allium.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..25adfc7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/andesite.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..8f815be --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/andesite_smooth.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..b590f63 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/anvil.json @@ -0,0 +1,52 @@ +{ + "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 new file mode 100644 index 0000000..09f541c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/anvil_slightly_damaged.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..1e1ad44 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/anvil_undamaged.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..4623b97 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/anvil_very_damaged.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..02f371b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_n.json @@ -0,0 +1,31 @@ +{ + "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 new file mode 100644 index 0000000..9697aec --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_ne.json @@ -0,0 +1,50 @@ +{ + "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 new file mode 100644 index 0000000..425b554 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_ns.json @@ -0,0 +1,31 @@ +{ + "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 new file mode 100644 index 0000000..c43bab9 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_nse.json @@ -0,0 +1,51 @@ +{ + "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 new file mode 100644 index 0000000..6d6c701 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bars_nsew.json @@ -0,0 +1,59 @@ +{ + "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 new file mode 100644 index 0000000..747d42b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/beacon.json @@ -0,0 +1,47 @@ +{ + "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 new file mode 100644 index 0000000..5486445 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bed_foot.json @@ -0,0 +1,26 @@ +{ + "textures": { + "particle": "blocks/bed_feet_top", + "top": "blocks/bed_feet_top", + "bottom": "blocks/planks_oak", + "end": "blocks/bed_feet_end", + "side": "blocks/bed_feet_side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 9, 16 ], + "faces": { + "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#top", "rotation": 90 }, + "north": { "uv": [ 0, 7, 16, 16 ], "texture": "#end" }, + "west": { "uv": [ 0, 7, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 16, 7, 0, 16 ], "texture": "#side" } + } + }, + { "from": [ 0, 3, 0 ], + "to": [ 16, 3, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bed_head.json b/desktopRuntime/resources/assets/minecraft/models/block/bed_head.json new file mode 100644 index 0000000..c53aded --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bed_head.json @@ -0,0 +1,26 @@ +{ + "textures": { + "particle": "blocks/bed_head_top", + "top": "blocks/bed_head_top", + "bottom": "blocks/planks_oak", + "end": "blocks/bed_head_end", + "side": "blocks/bed_head_side" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 9, 16 ], + "faces": { + "up": { "uv": [ 0, 16, 16, 0 ], "texture": "#top", "rotation": 90 }, + "south": { "uv": [ 0, 7, 16, 16 ], "texture": "#end" }, + "west": { "uv": [ 0, 7, 16, 16 ], "texture": "#side" }, + "east": { "uv": [ 16, 7, 0, 16 ], "texture": "#side" } + } + }, + { "from": [ 0, 3, 0 ], + "to": [ 16, 3, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" } + } + } + ] +} diff --git a/desktopRuntime/resources/assets/minecraft/models/block/bedrock.json b/desktopRuntime/resources/assets/minecraft/models/block/bedrock.json new file mode 100644 index 0000000..c635270 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bedrock.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..e63c643 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bedrock_mirrored.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..cd5ba86 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_bark.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..b1aee11 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..1cd3271 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_bottom_rh.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..82c321f --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..28c754c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_door_top_rh.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..9125e47 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_closed.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..ba95ded --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..b17fc3a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_inventory.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..009c707 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_n.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..8744122 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ne.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..884f686 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_ns.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..c6e3b55 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nse.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..ff83f60 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_nsew.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..e593ace --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_fence_post.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..bb52f30 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_inner_stairs.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..95fe59b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_leaves.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..4f40977 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_log.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..384487d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_log_side.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..8f94932 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_outer_stairs.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..cd3e708 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_planks.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..c2f31f6 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_sapling.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..aca0c6e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_stairs.json @@ -0,0 +1,8 @@ +{ + "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 new file mode 100644 index 0000000..0d50e58 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_closed.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..040947a --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/birch_wall_gate_open.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..45b0296 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_n.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..d845145 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ne.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..4bb2e8c --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_new.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..dfd85a1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_ns.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..db9beb7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nse.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..2f51743 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsew.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..7301142 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nsw.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..6d7f488 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_nw.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..ad6b830 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_s.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..955fc44 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_se.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..ae78059 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sew.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..035b4c3 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_pane_sw.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..74797fb --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/black_wool.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..1ee4a6d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_n.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..9c9cc06 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ne.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..9e6f5f1 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_new.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..948f016 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_ns.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..59afc3d --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nse.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..1611003 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsew.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..38b7492 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nsw.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..ab9f875 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_nw.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..87b5bad --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_s.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..0c085f7 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_se.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..b1f0d1e --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sew.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..d79300b --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_pane_sw.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..1292e85 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/blue_wool.json @@ -0,0 +1,6 @@ +{ + "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 new file mode 100644 index 0000000..b46b6f0 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/bookshelf.json @@ -0,0 +1,7 @@ +{ + "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 new file mode 100644 index 0000000..526a210 --- /dev/null +++ b/desktopRuntime/resources/assets/minecraft/models/block/brewing_stand_bottles_1.json @@ -0,0 +1,86 @@ +{ + "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 ], "tex