diff --git a/CREDITS.txt b/CREDITS.txt deleted file mode 100644 index a70c53d..0000000 --- a/CREDITS.txt +++ /dev/null @@ -1,65 +0,0 @@ -Minecraft Forge: Credits/Thank You - -Forge is a set of tools and modifications to the Minecraft base game code to assist -mod developers in creating new and exciting content. It has been in development for -several years now, but I would like to take this time thank a few people who have -helped it along it's way. - -First, the people who originally created the Forge projects way back in Minecraft -alpha. Eloraam of RedPower, and SpaceToad of Buildcraft, without their acceptiance -of me taking over the project, who knows what Minecraft modding would be today. - -Secondly, someone who has worked with me, and developed some of the core features -that allow modding to be as functional, and as simple as it is, cpw. For developing -FML, which stabelized the client and server modding ecosystem. As well as the base -loading system that allows us to modify Minecraft's code as elegently as possible. - -Mezz, who has stepped up as the issue and pull request manager. Helping to keep me -sane as well as guiding the community into creating better additions to Forge. - -Searge, Bspks, Fesh0r, ProfMobious, and all the rest over on the MCP team {of which -I am a part}. For creating some of the core tools needed to make Minecraft modding -both possible, and as stable as can be. - On that note, here is some specific information of the MCP data we use: - * Minecraft Coder Pack (MCP) * - Forge Mod Loader and Minecraft Forge have permission to distribute and automatically - download components of MCP and distribute MCP data files. This permission is not - transitive and others wishing to redistribute the Minecraft Forge source independently - should seek permission of MCP or remove the MCP data files and request their users - to download MCP separately. - -And lastly, the countless community members who have spent time submitting bug reports, -pull requests, and just helping out the community in general. Thank you. - ---LexManos - -========================================================================= - -This is Forge Mod Loader. - -You can find the source code at all times at https://github.com/MinecraftForge/MinecraftForge/tree/1.12.x/src/main/java/net/minecraftforge/fml - -This minecraft mod is a clean open source implementation of a mod loader for minecraft servers -and minecraft clients. - -The code is authored by cpw. - -It began by partially implementing an API defined by the client side ModLoader, authored by Risugami. -http://www.minecraftforum.net/topic/75440- -This support has been dropped as of Minecraft release 1.7, as Risugami no longer maintains ModLoader. - -It also contains suggestions and hints and generous helpings of code from LexManos, author of MinecraftForge. -http://www.minecraftforge.net/ - -Additionally, it contains an implementation of topological sort based on that -published at http://keithschwarz.com/interesting/code/?dir=topological-sort - -It also contains code from the Maven project for performing versioned dependency -resolution. http://maven.apache.org/ - -It also contains a partial repackaging of the javaxdelta library from http://sourceforge.net/projects/javaxdelta/ -with credit to it's authors. - -Forge Mod Loader downloads components from the Minecraft Coder Pack -(http://mcp.ocean-labs.de/index.php/Main_Page) with kind permission from the MCP team. - diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index b0cbe2b..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,520 +0,0 @@ -Unless noted below, Minecraft Forge, Forge Mod Loader, and all -parts herein are licensed under the terms of the LGPL 2.1 found -here http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt and -copied below. - -Homepage: http://minecraftforge.net/ - https://github.com/MinecraftForge/MinecraftForge - - -A note on authorship: -All source artifacts are property of their original author, with -the exclusion of the contents of the patches directory and others -copied from it from time to time. Authorship of the contents of -the patches directory is retained by the Minecraft Forge project. -This is because the patches are partially machine generated -artifacts, and are changed heavily due to the way forge works. -Individual attribution within them is impossible. - -Consent: -All contributions to Forge must consent to the release of any -patch content to the Forge project. - -A note on infectivity: -The LGPL is chosen specifically so that projects may depend on Forge -features without being infected with its license. That is the -purpose of the LGPL. Mods and others using this code via ordinary -Java mechanics for referencing libraries are specifically not bound -by Forge's license for the Mod code. - - -=== MCP Data === -This software includes data from the Minecraft Coder Pack (MCP), with kind permission -from them. The license to MCP data is not transitive - distribution of this data by -third parties requires independent licensing from the MCP team. This data is not -redistributable without permission from the MCP team. - -=== Sharing === -I grant permission for some parts of FML to be redistributed outside the terms of the LGPL, for the benefit of -the minecraft modding community. All contributions to these parts should be licensed under the same additional grant. - --- Runtime patcher -- -License is granted to redistribute the runtime patcher code (src/main/java/net/minecraftforge/fml/common/patcher -and subdirectories) under any alternative open source license as classified by the OSI (http://opensource.org/licenses) - --- ASM transformers -- -License is granted to redistribute the ASM transformer code (src/main/java/net/minecraftforge/common/asm/ and subdirectories) -under any alternative open source license as classified by the OSI (http://opensource.org/licenses) - -========================================================================= -This software includes portions from the Apache Maven project at -http://maven.apache.org/ specifically the ComparableVersion.java code. It is -included based on guidelines at -http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html -with notices intact. The only change is a non-functional change of package name. - -This software contains a partial repackaging of javaxdelta, a BSD licensed program for generating -binary differences and applying them, sourced from the subversion at http://sourceforge.net/projects/javaxdelta/ -authored by genman, heikok, pivot. -The only changes are to replace some Trove collection types with standard Java collections, and repackaged. -========================================================================= - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 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 Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - 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 Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -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 and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -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 other code 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. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - 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, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser 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 combine 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) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) 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. - - d) 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. - - e) 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 materials to be 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 with -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 Lesser 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 diff --git a/README.md b/README.md index 5f6bc50..6067d43 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ In order to adapt into BSL Shaders' SEUS/Old PBR format, some change were made: - All normal textures had been converted from OpenGL format (Y+) to DirectX format (Y-) by flipping green channel. - `Occlusion(R)Roughness(G)Metallic(B)` textures and `Emissive color(RGB)` textures had been edited and combined into `Glossiness(R)Metallic(G)Emissive strength(B)` textures for specular map. ## Additonal Note About Setup This Project -1. Build MCglTF with "gradlew jar" to create a [deobuscated version](https://forums.minecraftforge.net/topic/81617-1152-eclipse-and-gradle-how-to-use-jar-from-another-project-and-import-solved) of MCglTF. +1. Build MCglTF with "gradlew build" to create a `-dev` version of MCglTF which is inside `build/devlibs`. 2. Create a folder named `libs` in the same dir level as `src`. -3. Put deobuscated version of MCglTF into the `libs` folder. +3. Put `-dev` version of MCglTF into the `libs` folder. 4. In Eclipse IDE, add MCglTF jar as `Referenced Libraries` via `Project > Properties > Java Build Path > Libraries > Add JARs`. diff --git a/README.txt b/README.txt deleted file mode 100644 index 344bca7..0000000 --- a/README.txt +++ /dev/null @@ -1,46 +0,0 @@ - -Source installation information for modders -------------------------------------------- -This code follows the Minecraft Forge installation methodology. It will apply -some small patches to the vanilla MCP source code, giving you and it access -to some of the data and functions you need to build a successful mod. - -Note also that the patches are built against "un-renamed" MCP source code (aka -SRG Names) - this means that you will not be able to read them directly against -normal code. - -Setup Process: -============================== - -Step 1: Open your command-line and browse to the folder where you extracted the zip file. - -Step 2: You're left with a choice. -If you prefer to use Eclipse: -1. Run the following command: `gradlew genEclipseRuns` (`./gradlew genEclipseRuns` if you are on Mac/Linux) -2. Open Eclipse, Import > Existing Gradle Project > Select Folder - or run `gradlew eclipse` to generate the project. - -If you prefer to use IntelliJ: -1. Open IDEA, and import project. -2. Select your build.gradle file and have it import. -3. Run the following command: `gradlew genIntellijRuns` (`./gradlew genIntellijRuns` if you are on Mac/Linux) -4. Refresh the Gradle Project in IDEA if required. - -If at any point you are missing libraries in your IDE, or you've run into problems you can -run `gradlew --refresh-dependencies` to refresh the local cache. `gradlew clean` to reset everything -{this does not affect your code} and then start the process again. - -Mapping Names: -============================= -By default, the MDK is configured to use the official mapping names from Mojang for methods and fields -in the Minecraft codebase. These names are covered by a specific license. All modders should be aware of this -license, if you do not agree with it you can change your mapping names to other crowdsourced names in your -build.gradle. For the latest license text, refer to the mapping file itself, or the reference copy here: -https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md - -Additional Resources: -========================= -Community Documentation: http://mcforge.readthedocs.io/en/latest/gettingstarted/ -LexManos' Install Video: https://www.youtube.com/watch?v=8VEdtQLuLO0 -Forge Forum: https://forums.minecraftforge.net/ -Forge Discord: https://discord.gg/UvedJ9m \ No newline at end of file diff --git a/build.gradle b/build.gradle index 9b19f97..d5603a7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,207 +1,76 @@ -buildscript { - repositories { - // These repositories are only for Gradle plugins, put any other repositories in the repository block further below - maven { url = 'https://maven.minecraftforge.net' } - mavenCentral() - } - dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true - } -} -// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. plugins { - id 'eclipse' - id 'maven-publish' + id 'fabric-loom' version '0.12-SNAPSHOT' + id 'maven-publish' } -apply plugin: 'net.minecraftforge.gradle' - - -version = '1.18.2-Forge-1.2.0.0' -group = 'com.timlee9024.mcgltf.example' // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = 'MCglTF-Example' - -// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. -java.toolchain.languageVersion = JavaLanguageVersion.of(17) - -println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" -minecraft { - // The mappings can be changed at any time and must be in the following format. - // Channel: Version: - // official MCVersion Official field/method names from Mojang mapping files - // parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official - // - // You must be aware of the Mojang license when using the 'official' or 'parchment' mappings. - // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md - // - // Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge - // Additional setup is needed to use their mappings: https://github.com/ParchmentMC/Parchment/wiki/Getting-Started - // - // Use non-default mappings at your own risk. They may not always work. - // Simply re-run your setup task after changing the mappings to update your workspace. - mappings channel: 'official', version: '1.18.2' - - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default. - - // Default run configurations. - // These can be tweaked, removed, or duplicated as needed. - runs { - client { - workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - // The markers can be added/remove as needed separated by commas. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. - property 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels - property 'forge.logging.console.level', 'debug' - - // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. - property 'forge.enabledGameTestNamespaces', 'example_mcgltf_usage' - - mods { - example_mcgltf_usage { - source sourceSets.main - } - } - } - - server { - workingDirectory project.file('run') - - property 'forge.logging.markers', 'REGISTRIES' - - property 'forge.logging.console.level', 'debug' - - // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. - property 'forge.enabledGameTestNamespaces', 'example_mcgltf_usage' - - mods { - example_mcgltf_usage { - source sourceSets.main - } - } - } - - // This run config launches GameTestServer and runs all registered gametests, then exits. - // By default, the server will crash when no gametests are provided. - // The gametest system is also enabled by default for other run configs under the /test command. - gameTestServer { - workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - // The markers can be added/remove as needed separated by commas. - // "SCAN": For mods scan. - // "REGISTRIES": For firing of registry events. - // "REGISTRYDUMP": For getting the contents of all registries. - property 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - // You can set various levels here. - // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels - property 'forge.logging.console.level', 'debug' - // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. - property 'forge.enabledGameTestNamespaces', 'example_mcgltf_usage' +sourceCompatibility = JavaVersion.VERSION_17 +targetCompatibility = JavaVersion.VERSION_17 - mods { - example_mcgltf_usage { - source sourceSets.main - } - } - } - - data { - workingDirectory project.file('run') - - property 'forge.logging.markers', 'REGISTRIES' - - property 'forge.logging.console.level', 'debug' - - // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. - args '--mod', 'example_mcgltf_usage', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') - - mods { - example_mcgltf_usage { - source sourceSets.main - } - } - } - } -} - -// Include resources generated by data generators. -sourceSets.main.resources { srcDir 'src/generated/resources' } +archivesBaseName = project.archives_base_name +version = project.mod_version +group = project.maven_group repositories { - // Put repositories for dependencies here - // ForgeGradle automatically adds the Forge maven and Maven Central for you - - // If you have mod jar dependencies in ./libs, you can declare them as a repository like so: - flatDir { - dir 'libs' + // Add repositories to retrieve artifacts from in here. + // You should only use this when depending on other mods because + // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. + // See https://docs.gradle.org/current/userguide/declaring_repositories.html + // for more information about repositories. + flatDir { + dirs 'libs' } } dependencies { - // Specify the version of Minecraft to use. If this is any group other than 'net.minecraft', it is assumed - // that the dep is a ForgeGradle 'patcher' dependency, and its patches will be applied. - // The userdev artifact is a special name and will get all sorts of transformations applied to it. - minecraft 'net.minecraftforge:forge:1.18.2-40.1.69' - - // Real mod deobf dependency examples - these get remapped to your current mappings - // compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api") // Adds JEI API as a compile dependency - // runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") // Adds the full JEI mod as a runtime dependency - // implementation fg.deobf("com.tterrag.registrate:Registrate:MC${mc_version}-${registrate_version}") // Adds registrate as a dependency + // To change the versions see the gradle.properties file + minecraft "com.mojang:minecraft:${project.minecraft_version}" + mappings loom.officialMojangMappings() + modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + + // Fabric API. This is technically optional, but you probably want it anyway. + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + implementation fileTree(dir: 'libs', include: '*.jar') +} - // Examples using mod jars from ./libs - // implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}") +processResources { + inputs.property "version", project.version - // For more info... - // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html - // http://www.gradle.org/docs/current/userguide/dependency_management.html - - implementation fileTree(dir: 'libs', include: '*.jar') + filesMatching("fabric.mod.json") { + expand "version": project.version + } } -// Example for how to get properties into the manifest for reading at runtime. -jar { - manifest { - attributes([ - "Specification-Title" : "MCglTF-Example", - "Specification-Vendor" : "TimLee9024", - "Specification-Version" : "1", // We are version 1 of ourselves - "Implementation-Title" : project.name, - "Implementation-Version" : project.jar.archiveVersion, - "Implementation-Vendor" : "TimLee9024", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") - ]) - } +tasks.withType(JavaCompile).configureEach { + // Minecraft 1.18 (1.18-pre2) upwards uses Java 17. + it.options.release = 17 } -// Example configuration to allow publishing using the maven-publish plugin -// This is the preferred method to reobfuscate your jar file -jar.finalizedBy('reobfJar') -// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing -// publish.dependsOn('reobfJar') +java { + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. + withSourcesJar() +} -publishing { - publications { - mavenJava(MavenPublication) { - artifact jar - } - } - repositories { - maven { - url "file://${project.projectDir}/mcmodsrepo" - } - } +jar { + from("LICENSE") { + rename { "${it}_${project.archivesBaseName}"} + } } -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation +// configure the maven publication +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. + } } diff --git a/gradle.properties b/gradle.properties index 878bf1f..922868b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,15 @@ -# Sets default memory used for gradle commands. Can be overridden by user or command line properties. -# This is required to provide enough memory for the Minecraft decompilation process. -org.gradle.jvmargs=-Xmx3G -org.gradle.daemon=false \ No newline at end of file +# Done to increase the memory available to gradle. +org.gradle.jvmargs=-Xmx4G + +# Fabric Properties + # check these on https://fabricmc.net/develop + minecraft_version=1.18.2 + loader_version=0.14.8 + +# Mod Properties + mod_version = 1.18.2-Fabric-1.0.0.0 + maven_group = com.timlee9024.mcgltf.example + archives_base_name = MCglTF-Example + +# Dependencies + fabric_version=0.58.0+1.18.2 diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..b02216b --- /dev/null +++ b/settings.gradle @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + mavenCentral() + gradlePluginPortal() + } +} diff --git a/src/main/java/com/timlee9024/mcgltf/example/Example.java b/src/main/java/com/timlee9024/mcgltf/example/Example.java index 2b1dfce..3b7b744 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/Example.java +++ b/src/main/java/com/timlee9024/mcgltf/example/Example.java @@ -1,208 +1,61 @@ package com.timlee9024.mcgltf.example; -import java.util.function.Consumer; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.timlee9024.mcgltf.MCglTF; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; +import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; +import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.material.Material; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.IItemRenderProperties; -import net.minecraftforge.client.event.EntityRenderersEvent; -import net.minecraftforge.common.ForgeSpawnEggItem; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.event.entity.EntityAttributeCreationEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -@Mod("example_mcgltf_usage") -public class Example { +public class Example implements ModInitializer { - public static ExampleBlock EXAMPLE_BLOCK; - public static BlockEntityType EXAMPLE_BLOCK_ENTITY_TYPE; - public static EntityType EXAMPLE_ENTITY_TYPE; + public static Example INSTANCE; - @Mod.EventBusSubscriber(value = Dist.DEDICATED_SERVER, bus = Mod.EventBusSubscriber.Bus.MOD) - public static class Server { - - @SubscribeEvent - public static void onBlockRegistryEvent(final RegistryEvent.Register event) { - EXAMPLE_BLOCK = new ExampleBlock(BlockBehaviour.Properties.of(Material.STONE).strength(0.3F).sound(SoundType.STONE).noOcclusion().isValidSpawn((a, b, c, d) -> false).isRedstoneConductor((a, b, c) -> false).isSuffocating((a, b, c) -> false).isViewBlocking((a, b, c) -> false)); - EXAMPLE_BLOCK.setRegistryName(new ResourceLocation("mcgltf", "example_block")); - event.getRegistry().register(EXAMPLE_BLOCK); - } - - @SubscribeEvent - public static void onBlockEntityTypeRegistryEvent(final RegistryEvent.Register> event) { - EXAMPLE_BLOCK_ENTITY_TYPE = BlockEntityType.Builder.of(ExampleBlockEntity::new, EXAMPLE_BLOCK).build(null); - EXAMPLE_BLOCK_ENTITY_TYPE.setRegistryName(new ResourceLocation("mcgltf", "example_blockentity")); - event.getRegistry().register(EXAMPLE_BLOCK_ENTITY_TYPE); - } - - @SubscribeEvent - public static void onEntityTypeRegistryEvent(final RegistryEvent.Register> event) { - EXAMPLE_ENTITY_TYPE = EntityType.Builder.of(ExampleEntity::new, MobCategory.MISC) - .sized(0.6F, 1.95F) - .clientTrackingRange(10) - .build("mcgltf:example_entity"); - EXAMPLE_ENTITY_TYPE.setRegistryName(new ResourceLocation("mcgltf", "example_entity")); - event.getRegistry().register(EXAMPLE_ENTITY_TYPE); - } - - @SubscribeEvent - public static void onItemRegistryEvent(final RegistryEvent.Register event) { - Item item = new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC)); - item.setRegistryName(new ResourceLocation("mcgltf", "example_item")); - event.getRegistry().register(item); - - BlockItem blockItem = new BlockItem(EXAMPLE_BLOCK, new Item.Properties().tab(CreativeModeTab.TAB_MISC)); - blockItem.setRegistryName(EXAMPLE_BLOCK.getRegistryName()); - event.getRegistry().register(blockItem); - - ForgeSpawnEggItem spawnEggItem = new ForgeSpawnEggItem(() -> EXAMPLE_ENTITY_TYPE, 12422002, 5651507, new Item.Properties().tab(CreativeModeTab.TAB_MISC)); - spawnEggItem.setRegistryName(new ResourceLocation("mcgltf", "example_entity_spawn_egg")); - event.getRegistry().register(spawnEggItem); - } - - @SubscribeEvent - public static void onEvent(final EntityAttributeCreationEvent event) { - event.put(EXAMPLE_ENTITY_TYPE, ExampleEntity.createAttributes().build()); - } - } + public ExampleBlock exampleBlock; + public BlockEntityType exampleBlockEntityType; + public EntityType exampleEntityType; + public Item item; + public BlockItem blockItem; - @Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) - public static class Client { - - private static Item item; - private static BlockItem blockItem; - - @SubscribeEvent - public static void onBlockRegistryEvent(final RegistryEvent.Register event) { - EXAMPLE_BLOCK = new ExampleBlock(BlockBehaviour.Properties.of(Material.STONE).strength(0.3F).sound(SoundType.STONE).noOcclusion().isValidSpawn((a, b, c, d) -> false).isRedstoneConductor((a, b, c) -> false).isSuffocating((a, b, c) -> false).isViewBlocking((a, b, c) -> false)); - EXAMPLE_BLOCK.setRegistryName(new ResourceLocation("mcgltf", "example_block")); - event.getRegistry().register(EXAMPLE_BLOCK); - } - - @SubscribeEvent - public static void onBlockEntityTypeRegistryEvent(final RegistryEvent.Register> event) { - EXAMPLE_BLOCK_ENTITY_TYPE = BlockEntityType.Builder.of(ExampleBlockEntity::new, EXAMPLE_BLOCK).build(null); - EXAMPLE_BLOCK_ENTITY_TYPE.setRegistryName(new ResourceLocation("mcgltf", "example_blockentity")); - event.getRegistry().register(EXAMPLE_BLOCK_ENTITY_TYPE); - } - - @SubscribeEvent - public static void onEntityTypeRegistryEvent(final RegistryEvent.Register> event) { - EXAMPLE_ENTITY_TYPE = EntityType.Builder.of(ExampleEntity::new, MobCategory.MISC) - .sized(0.6F, 1.95F) - .clientTrackingRange(10) - .build("mcgltf:example_entity"); - EXAMPLE_ENTITY_TYPE.setRegistryName(new ResourceLocation("mcgltf", "example_entity")); - event.getRegistry().register(EXAMPLE_ENTITY_TYPE); - } - - @SubscribeEvent - public static void onItemRegistryEvent(final RegistryEvent.Register event) { - ExampleItemRenderer itemRenderer = new ExampleItemRenderer() { - - @Override - public ResourceLocation getModelLocation() { - return new ResourceLocation("mcgltf", "models/item/water_bottle.gltf"); - } - }; - MCglTF.getInstance().addGltfModelReceiver(itemRenderer); - - ExampleItemRenderer blockItemRenderer = new ExampleItemRenderer() { - - @Override - public ResourceLocation getModelLocation() { - return new ResourceLocation("mcgltf", "models/block/boom_box.gltf"); - } - }; - MCglTF.getInstance().addGltfModelReceiver(blockItemRenderer); - - //According to Forge Doc "Each mod should only have one instance of a custom TEISR/ISTER/BEWLR.", due to creating an instance will also initiate unused fields inside the class which waste a lots of memory. - BlockEntityWithoutLevelRenderer bewlr = new BlockEntityWithoutLevelRenderer(Minecraft.getInstance().getBlockEntityRenderDispatcher(), Minecraft.getInstance().getEntityModels()) { - - @Override - public void renderByItem(ItemStack p_108830_, ItemTransforms.TransformType p_108831_, PoseStack p_108832_, MultiBufferSource p_108833_, int p_108834_, int p_108835_) { - Item currentItem = p_108830_.getItem(); - if(currentItem == item) { - itemRenderer.renderByItem(p_108831_, p_108832_, p_108833_, p_108834_, p_108835_); - } - else if(currentItem == blockItem) { - blockItemRenderer.renderByItem(p_108831_, p_108832_, p_108833_, p_108834_, p_108835_); - } - } - - }; - IItemRenderProperties renderProperties = new IItemRenderProperties() { - - @Override - public BlockEntityWithoutLevelRenderer getItemStackRenderer() { - return bewlr; - } - - }; - - item = new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC)) { - - @Override - public void initializeClient(Consumer consumer) { - consumer.accept(renderProperties); - } - - }; - item.setRegistryName(new ResourceLocation("mcgltf", "example_item")); - event.getRegistry().register(item); - - blockItem = new BlockItem(EXAMPLE_BLOCK, new Item.Properties().tab(CreativeModeTab.TAB_MISC)) { - - @Override - public void initializeClient(Consumer consumer) { - consumer.accept(renderProperties); - } - - }; - blockItem.setRegistryName(EXAMPLE_BLOCK.getRegistryName()); - event.getRegistry().register(blockItem); - - ForgeSpawnEggItem spawnEggItem = new ForgeSpawnEggItem(() -> EXAMPLE_ENTITY_TYPE, 12422002, 5651507, new Item.Properties().tab(CreativeModeTab.TAB_MISC)); - spawnEggItem.setRegistryName(new ResourceLocation("mcgltf", "example_entity_spawn_egg")); - event.getRegistry().register(spawnEggItem); - } - - @SubscribeEvent - public static void onEvent(final EntityAttributeCreationEvent event) { - event.put(EXAMPLE_ENTITY_TYPE, ExampleEntity.createAttributes().build()); - } - - @SubscribeEvent - public static void onEvent(final EntityRenderersEvent.RegisterRenderers event) { - event.registerBlockEntityRenderer(EXAMPLE_BLOCK_ENTITY_TYPE, (context) -> { - ExampleBlockEntityRenderer ber = new ExampleBlockEntityRenderer(); - MCglTF.getInstance().addGltfModelReceiver(ber); - return ber; - }); - event.registerEntityRenderer(EXAMPLE_ENTITY_TYPE, (context) -> { - ExampleEntityRenderer entityRenderer = new ExampleEntityRenderer(context); - MCglTF.getInstance().addGltfModelReceiver(entityRenderer); - return entityRenderer; - }); - } + @Override + public void onInitialize() { + INSTANCE = this; + + exampleBlock = new ExampleBlock(BlockBehaviour.Properties.of(Material.STONE).strength(0.3F) + .sound(SoundType.STONE) + .noOcclusion() + .isValidSpawn((a, b, c, d) -> false) + .isRedstoneConductor((a, b, c) -> false) + .isSuffocating((a, b, c) -> false) + .isViewBlocking((a, b, c) -> false)); + Registry.register(Registry.BLOCK, new ResourceLocation("mcgltf", "example_block"), exampleBlock); + + exampleEntityType = EntityType.Builder.of(ExampleEntity::new, MobCategory.MISC) + .sized(0.6F, 1.95F) + .clientTrackingRange(10) + .build("mcgltf:example_entity"); + Registry.register(Registry.ENTITY_TYPE, new ResourceLocation("mcgltf", "example_entity"), exampleEntityType); + FabricDefaultAttributeRegistry.register(exampleEntityType, ExampleEntity.createAttributes()); + + exampleBlockEntityType = FabricBlockEntityTypeBuilder.create(ExampleBlockEntity::new, exampleBlock).build(); + Registry.register(Registry.BLOCK_ENTITY_TYPE, new ResourceLocation("mcgltf", "example_blockentity"), exampleBlockEntityType); + + item = new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC)); + Registry.register(Registry.ITEM, new ResourceLocation("mcgltf", "example_item"), item); + + blockItem = new BlockItem(exampleBlock, new Item.Properties().tab(CreativeModeTab.TAB_MISC)); + Registry.register(Registry.ITEM, new ResourceLocation("mcgltf", "example_block"), blockItem); + + SpawnEggItem spawnEggItem = new SpawnEggItem(exampleEntityType, 12422002, 5651507, new Item.Properties().tab(CreativeModeTab.TAB_MISC)); + Registry.register(Registry.ITEM, new ResourceLocation("mcgltf", "example_entity_spawn_egg"), spawnEggItem); } } diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntity.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntity.java index 3aec80b..ba88de1 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntity.java +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntity.java @@ -7,7 +7,7 @@ public class ExampleBlockEntity extends BlockEntity { public ExampleBlockEntity(BlockPos p_155229_, BlockState p_155230_) { - super(Example.EXAMPLE_BLOCK_ENTITY_TYPE, p_155229_, p_155230_); + super(Example.INSTANCE.exampleBlockEntityType, p_155229_, p_155230_); } } diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntityRenderer.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntityRenderer.java index f4c9aa3..ab558b4 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntityRenderer.java +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntityRenderer.java @@ -48,8 +48,8 @@ public void onReceiveSharedModel(RenderedGltfModel renderedModel) { } /** - * Since you use custom BEWLR for BlockItem instead of BER to render item form of block, - * the last parameters p_112312_ which control overlay color is almost unused. + * Since you use custom BEWLR(DynamicItemRenderer) for BlockItem instead of BER to render item form of block, + * the last parameters p_112312_ which control overlay color is almost never used. */ @Override public void render(ExampleBlockEntity p_112307_, float p_112308_, PoseStack p_112309_, MultiBufferSource p_112310_, int p_112311_, int p_112312_) { diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleClient.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleClient.java new file mode 100644 index 0000000..782fd50 --- /dev/null +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleClient.java @@ -0,0 +1,59 @@ +package com.timlee9024.mcgltf.example; + +import com.timlee9024.mcgltf.MCglTF; + +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.resources.ResourceLocation; + +public class ExampleClient implements ClientModInitializer { + + public static ExampleClient INSTANCE; + + public float tickDelta; + + @Override + public void onInitializeClient() { + INSTANCE = this; + + WorldRenderEvents.START.register((listener) -> { + tickDelta = listener.tickDelta(); + }); + + BlockEntityRendererRegistry.register(Example.INSTANCE.exampleBlockEntityType, (context) -> { + ExampleBlockEntityRenderer ber = new ExampleBlockEntityRenderer(); + MCglTF.getInstance().addGltfModelReceiver(ber); + return ber; + }); + + EntityRendererRegistry.register(Example.INSTANCE.exampleEntityType, (context) -> { + ExampleEntityRenderer entityRenderer = new ExampleEntityRenderer(context); + MCglTF.getInstance().addGltfModelReceiver(entityRenderer); + return entityRenderer; + }); + + ExampleItemRenderer itemRenderer = new ExampleItemRenderer() { + + @Override + public ResourceLocation getModelLocation() { + return new ResourceLocation("mcgltf", "models/item/water_bottle.gltf"); + } + }; + MCglTF.getInstance().addGltfModelReceiver(itemRenderer); + BuiltinItemRendererRegistry.INSTANCE.register(Example.INSTANCE.item, itemRenderer); + + ExampleItemRenderer blockItemRenderer = new ExampleItemRenderer() { + + @Override + public ResourceLocation getModelLocation() { + return new ResourceLocation("mcgltf", "models/block/boom_box.gltf"); + } + }; + MCglTF.getInstance().addGltfModelReceiver(blockItemRenderer); + BuiltinItemRendererRegistry.INSTANCE.register(Example.INSTANCE.blockItem, blockItemRenderer); + } + +} diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleItemRenderer.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleItemRenderer.java index d3696ed..d65a7d0 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleItemRenderer.java +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleItemRenderer.java @@ -21,12 +21,13 @@ import com.timlee9024.mcgltf.animation.InterpolatedChannel; import de.javagl.jgltf.model.AnimationModel; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.ItemTransforms; -import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraft.world.item.ItemStack; -public abstract class ExampleItemRenderer implements IGltfModelReceiver { +public abstract class ExampleItemRenderer implements IGltfModelReceiver, BuiltinItemRendererRegistry.DynamicItemRenderer { protected RenderedGltfScene renderedScene; @@ -41,10 +42,11 @@ public void onReceiveSharedModel(RenderedGltfModel renderedModel) { animations.add(GltfAnimationCreator.createGltfAnimation(animationModel)); } } - - public void renderByItem(ItemTransforms.TransformType p_108831_, PoseStack p_108832_, MultiBufferSource p_108833_, int p_108834_, int p_108835_) { + + @Override + public void render(ItemStack stack, ItemTransforms.TransformType mode, PoseStack matrices, MultiBufferSource vertexConsumers, int light, int overlay) { Minecraft mc = Minecraft.getInstance(); - float time = (mc.level.getGameTime() + MinecraftForgeClient.getPartialTick()) / 20; + float time = (mc.level.getGameTime() + ExampleClient.INSTANCE.tickDelta) / 20; //Play every animation clips simultaneously for(List animation : animations) { animation.parallelStream().forEach((channel) -> { @@ -62,7 +64,7 @@ public void renderByItem(ItemTransforms.TransformType p_108831_, PoseStack p_108 boolean currentDepthTest = GL11.glGetBoolean(GL11.GL_DEPTH_TEST); GL11.glEnable(GL11.GL_DEPTH_TEST); - switch(p_108831_) { + switch(mode) { case THIRD_PERSON_LEFT_HAND: case THIRD_PERSON_RIGHT_HAND: case HEAD: @@ -70,11 +72,11 @@ public void renderByItem(ItemTransforms.TransformType p_108831_, PoseStack p_108 GL11.glEnable(GL11.GL_BLEND); GlStateManager._blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - RenderedGltfModel.CURRENT_POSE = p_108832_.last().pose(); - RenderedGltfModel.CURRENT_NORMAL = p_108832_.last().normal(); + RenderedGltfModel.CURRENT_POSE = matrices.last().pose(); + RenderedGltfModel.CURRENT_NORMAL = matrices.last().normal(); - GL30.glVertexAttribI2i(RenderedGltfModel.vaUV1, p_108835_ & '\uffff', p_108835_ >> 16 & '\uffff'); - GL30.glVertexAttribI2i(RenderedGltfModel.vaUV2, p_108834_ & '\uffff', p_108834_ >> 16 & '\uffff'); + GL30.glVertexAttribI2i(RenderedGltfModel.vaUV1, overlay & '\uffff', overlay >> 16 & '\uffff'); + GL30.glVertexAttribI2i(RenderedGltfModel.vaUV2, light & '\uffff', light >> 16 & '\uffff'); if(MCglTF.getInstance().isShaderModActive()) { renderedScene.renderForShaderMod(); @@ -116,10 +118,10 @@ public void renderByItem(ItemTransforms.TransformType p_108831_, PoseStack p_108 GL11.glEnable(GL11.GL_BLEND); GlStateManager._blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - RenderedGltfModel.CURRENT_POSE = p_108832_.last().pose(); - RenderedGltfModel.CURRENT_NORMAL = p_108832_.last().normal(); + RenderedGltfModel.CURRENT_POSE = matrices.last().pose(); + RenderedGltfModel.CURRENT_NORMAL = matrices.last().normal(); - GL30.glVertexAttribI2i(RenderedGltfModel.vaUV2, p_108834_ & '\uffff', p_108834_ >> 16 & '\uffff'); + GL30.glVertexAttribI2i(RenderedGltfModel.vaUV2, light & '\uffff', light >> 16 & '\uffff'); if(MCglTF.getInstance().isShaderModActive()) { renderedScene.renderForShaderMod(); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml deleted file mode 100644 index fd80017..0000000 --- a/src/main/resources/META-INF/mods.toml +++ /dev/null @@ -1,64 +0,0 @@ -# This is an example mods.toml file. It contains the data relating to the loading mods. -# There are several mandatory fields (#mandatory), and many more that are optional (#optional). -# The overall format is standard TOML format, v0.5.0. -# Note that there are a couple of TOML lists in this file. -# Find more information on toml format here: https://github.com/toml-lang/toml -# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml -modLoader="javafml" #mandatory -# A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[40,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. -# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. -# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. -license="MIT License" -# A URL to refer people to when problems occur with this mod -issueTrackerURL="https://github.com/TimLee9024/MCglTF-Example/issues/" #optional -# A list of mods - how many allowed here is determined by the individual mod loader -[[mods]] #mandatory -# The modid of the mod -modId="example_mcgltf_usage" #mandatory -# The version number of the mod - there's a few well known ${} variables useable here or just hardcode it -# ${file.jarVersion} will substitute the value of the Implementation-Version as read from the mod's JAR file metadata -# see the associated build.gradle script for how to populate this completely automatically during a build -version="${file.jarVersion}" #mandatory - # A display name for the mod -displayName="Example MCglTF Usage" #mandatory -# A URL to query for updates for this mod. See the JSON update specification https://mcforge.readthedocs.io/en/latest/gettingstarted/autoupdate/ -updateJSONURL="https://raw.githubusercontent.com/TimLee9024/MCglTF-Example/1.18.2-Forge/updates.json" #optional -# A URL for the "homepage" for this mod, displayed in the mod UI -displayURL="https://github.com/TimLee9024/MCglTF-Example/tree/1.18.2-Forge/" #optional -# A file name (in the root of the mod JAR) containing a logo for display -logoFile="icon.png" #optional -# A text field displayed in the mod UI -credits="Microsoft and Cesium, for providing glTF sample models" #optional -# A text field displayed in the mod UI -authors="TimLee9024" #optional -# The description text for the mod (multi line!) (#mandatory) -description=''' -Example mod to demonstrate the usage of MCglTF. -''' -# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. -[[dependencies.example_mcgltf_usage]] #optional - # the modid of the dependency - modId="forge" #mandatory - # Does this dependency have to exist - if not, ordering below must be specified - mandatory=true #mandatory - # The version range of the dependency - versionRange="[40,)" #mandatory - # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory - ordering="NONE" - # Side this dependency is applied on - BOTH, CLIENT or SERVER - side="BOTH" -# Here's another dependency -[[dependencies.example_mcgltf_usage]] - modId="minecraft" - mandatory=true -# This version range declares a minimum of the current minecraft version up to but not including the next major version - versionRange="[1.18.2,1.19)" - ordering="NONE" - side="BOTH" -[[dependencies.example_mcgltf_usage]] - modId="mcgltf" - mandatory=false - versionRange="[1.18.2-Forge-1.0.0.0,)" - ordering="AFTER" - side="CLIENT" diff --git a/src/main/resources/icon.png b/src/main/resources/assets/mcgltf/icon.png similarity index 100% rename from src/main/resources/icon.png rename to src/main/resources/assets/mcgltf/icon.png diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..36fb304 --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "id": "example_mcgltf_usage", + "version": "${version}", + + "name": "Example MCglTF Usage", + "description": "Example mod to demonstrate the usage of MCglTF.", + "authors": [ + "TimLee9024" + ], + "contact": { + "homepage": "https://github.com/TimLee9024/MCglTF-Example/tree/1.18.2-Fabric", + "sources": "https://github.com/TimLee9024/MCglTF-Example/tree/1.18.2-Fabric", + "issues": "https://github.com/TimLee9024/MCglTF-Example/issues" + }, + + "license": "MIT", + "icon": "assets/mcgltf/icon.png", + + "environment": "*", + "entrypoints": { + "main": [ + "com.timlee9024.mcgltf.example.Example" + ], + "client": [ + "com.timlee9024.mcgltf.example.ExampleClient" + ] + }, + + "depends": { + "fabricloader": ">=0.14.6", + "fabric": "*", + "minecraft": "~1.18.2", + "java": ">=17" + }, + "suggests": { + "optifabric": "*" + }, + "conflicts": { + "iris": "*" + } +} diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta deleted file mode 100644 index 20eb1f5..0000000 --- a/src/main/resources/pack.mcmeta +++ /dev/null @@ -1,8 +0,0 @@ -{ - "pack": { - "description": "MCglTF Example resources", - "pack_format": 9, - "forge:resource_pack_format": 8, - "forge:data_pack_format": 9 - } -} diff --git a/updates.json b/updates.json deleted file mode 100644 index e97cbd9..0000000 --- a/updates.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "homepage": "https://github.com/TimLee9024/MCglTF-Example/releases", - "1.18.2": { - "1.18.2-Forge-1.2.0.0": "Update to compatible with MCglTF-1.2.0.0", - "1.18.2-Forge-1.0.0.2": "Fix registry name of block item is incorrect on server", - "1.18.2-Forge-1.0.0.1": "Fix depth test sometime not enable on GUI Item", - "1.18.2-Forge-1.0.0.0": "Initial release" - }, - "promos": { - "1.18.2-latest": "1.18.2-Forge-1.2.0.0", - "1.18.2-recommended": "1.18.2-Forge-1.2.0.0" - } -} \ No newline at end of file