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.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 c1a968a..fdf8979 100644 --- a/build.gradle +++ b/build.gradle @@ -1,187 +1,96 @@ -buildscript { - repositories { - maven { url = 'https://maven.minecraftforge.net' } - mavenCentral() - } - dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true - } -} -apply plugin: 'net.minecraftforge.gradle' -// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. -apply plugin: 'eclipse' -apply plugin: 'maven-publish' - -version = '1.16.5-Forge-1.2.0.0' -group = 'com.timlee9024.mcgltf.example' // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = 'MCglTF-Example' - -java.toolchain.languageVersion = JavaLanguageVersion.of(8) // Mojang ships Java 8 to end users, so your mod should target Java 8. - -compileJava { - options.encoding = 'UTF-8' +plugins { + id 'fabric-loom' version '0.12-SNAPSHOT' + id 'maven-publish' } -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: - // snapshot YYYYMMDD Snapshot are built nightly. - // stable # Stables are built at the discretion of the MCP team. - // official MCVersion Official field/method names from Mojang mapping files - // - // You must be aware of the Mojang license when using the 'official' mappings. - // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md - // - // 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.16.5' - // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. - - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') - - // 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 changed as needed. - // "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' - - mods { - example_mcgltf_usage { - source sourceSets.main - } - } - } - - server { - workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - // The markers can be changed as needed. - // "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' - - mods { - example_mcgltf_usage { - source sourceSets.main - } - } - } - - data { - workingDirectory project.file('run') +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 - // Recommended logging data for a userdev environment - // The markers can be changed as needed. - // "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' - - // 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 { - // If you want to use a (flat) filesystem directory as a repository - flatDir { + // 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 then 'net.minecraft' it is assumed - // that the dep is a ForgeGradle 'patcher' dependency. And it's 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.16.5-36.2.39' + // 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}" - // You may put jars on which you depend on in ./libs or you may define them like so.. - // compile "some.group:artifact:version:classifier" - // compile "some.group:artifact:version" + // Fabric API. This is technically optional, but you probably want it anyway. + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - // Real examples - // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env - // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env + // PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs. + // You may need to force-disable transitiveness on them. + implementation fileTree(dir: 'libs', include: '*.jar') +} - // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime. - // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev' +processResources { + inputs.property "version", project.version - // These dependencies get remapped to your current MCP mappings - // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev' + filesMatching("fabric.mod.json") { + expand "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') +tasks.withType(JavaCompile).configureEach { + // ensure that the encoding is set to UTF-8, no matter what the system default is + // this fixes some edge cases with special characters not displaying correctly + // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html + // If Javadoc is generated, this must be specified in that task too. + it.options.encoding = "UTF-8" + + // The Minecraft launcher currently installs Java 8 for users, so your mod probably wants to target Java 8 too + // JDK 9 introduced a new way of specifying this that will make sure no newer classes or methods are used. + // We'll use that if it's available, but otherwise we'll use the older option. + def targetVersion = 8 + if (JavaVersion.current().isJava9Compatible()) { + it.options.release = targetVersion + } +} +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() } -// Example for how to get properties into the manifest for reading by the 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": "${version}", - "Implementation-Vendor" :"TimLee9024", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") - ]) - } + from("LICENSE") { + rename { "${it}_${project.archivesBaseName}"} + } } -// Example configuration to allow publishing using the maven-publish task -// 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') - +// configure the maven publication publishing { - publications { - mavenJava(MavenPublication) { - artifact jar - } - } - repositories { - maven { - url "file:///${project.projectDir}/mcmodsrepo" - } - } + publications { + mavenJava(MavenPublication) { + // add all the jars that should be included when publishing to maven + artifact(remapJar) { + builtBy remapJar + } + artifact(sourcesJar) { + builtBy remapSourcesJar + } + } + } + + // 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..acf6544 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,16 @@ -# 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/versions.html + minecraft_version=1.16.5 + loader_version=0.14.8 + +# Mod Properties + mod_version = 1.16.5-Fabric-1.0.0.0 + maven_group = com.timlee9024.mcgltf.example + archives_base_name = MCglTF-Example + +# Dependencies + # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api (or https://fabricmc.net/versions.html) + fabric_version=0.42.0+1.16 diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..f91a4fe --- /dev/null +++ b/settings.gradle @@ -0,0 +1,9 @@ +pluginManagement { + repositories { + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + gradlePluginPortal() + } +} diff --git a/src/main/java/com/timlee9024/mcgltf/example/Example.java b/src/main/java/com/timlee9024/mcgltf/example/Example.java index dbd7d66..108cffb 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/Example.java +++ b/src/main/java/com/timlee9024/mcgltf/example/Example.java @@ -1,205 +1,60 @@ package com.timlee9024.mcgltf.example; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.timlee9024.mcgltf.MCglTF; - -import net.minecraft.block.AbstractBlock; -import net.minecraft.block.Block; -import net.minecraft.block.SoundType; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.client.renderer.model.ItemCameraTransforms; -import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer; -import net.minecraft.entity.EntityClassification; -import net.minecraft.entity.EntityType; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -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.client.registry.ClientRegistry; -import net.minecraftforge.fml.client.registry.IRenderFactory; -import net.minecraftforge.fml.client.registry.RenderingRegistry; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; - -@Mod("example_mcgltf_usage") -public class Example { - - public static ExampleBlock EXAMPLE_BLOCK; - public static TileEntityType EXAMPLE_TILE_ENTITY_TYPE; - public static EntityType EXAMPLE_ENTITY_TYPE; +import net.fabricmc.api.ModInitializer; +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.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; + +public class Example implements ModInitializer { + + 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(AbstractBlock.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 onTileEntityTypeRegistryEvent(final RegistryEvent.Register> event) { - EXAMPLE_TILE_ENTITY_TYPE = TileEntityType.Builder.of(ExampleTileEntity::new, EXAMPLE_BLOCK).build(null); - EXAMPLE_TILE_ENTITY_TYPE.setRegistryName(new ResourceLocation("mcgltf", "example_tileentity")); - event.getRegistry().register(EXAMPLE_TILE_ENTITY_TYPE); - } - - @SubscribeEvent - public static void onEntityTypeRegistryEvent(final RegistryEvent.Register> event) { - EXAMPLE_ENTITY_TYPE = EntityType.Builder.of(ExampleEntity::new, EntityClassification.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(ItemGroup.TAB_MISC)); - item.setRegistryName(new ResourceLocation("mcgltf", "example_item")); - event.getRegistry().register(item); - - BlockItem blockItem = new BlockItem(EXAMPLE_BLOCK, new Item.Properties().tab(ItemGroup.TAB_MISC)); - blockItem.setRegistryName(EXAMPLE_BLOCK.getRegistryName()); - event.getRegistry().register(blockItem); - - ForgeSpawnEggItem spawnEggItem = new ForgeSpawnEggItem(() -> EXAMPLE_ENTITY_TYPE, 12422002, 5651507, new Item.Properties().tab(ItemGroup.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(AbstractBlock.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 onTileEntityTypeRegistryEvent(final RegistryEvent.Register> event) { - EXAMPLE_TILE_ENTITY_TYPE = TileEntityType.Builder.of(ExampleTileEntity::new, EXAMPLE_BLOCK).build(null); - EXAMPLE_TILE_ENTITY_TYPE.setRegistryName(new ResourceLocation("mcgltf", "example_tileentity")); - event.getRegistry().register(EXAMPLE_TILE_ENTITY_TYPE); - } - - @SubscribeEvent - public static void onEntityTypeRegistryEvent(final RegistryEvent.Register> event) { - EXAMPLE_ENTITY_TYPE = EntityType.Builder.of(ExampleEntity::new, EntityClassification.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. - ItemStackTileEntityRenderer ister = new ItemStackTileEntityRenderer() { - - @Override - public void renderByItem(ItemStack p_239207_1_, ItemCameraTransforms.TransformType p_239207_2_, MatrixStack p_239207_3_, IRenderTypeBuffer p_239207_4_, int p_239207_5_, int p_239207_6_) { - Item currentItem = p_239207_1_.getItem(); - if(currentItem == item) { - itemRenderer.render(p_239207_2_, p_239207_3_, p_239207_4_, p_239207_5_, p_239207_6_); - } - else if(currentItem == blockItem) { - blockItemRenderer.render(p_239207_2_, p_239207_3_, p_239207_4_, p_239207_5_, p_239207_6_); - } - } - }; - - item = new Item(new Item.Properties().tab(ItemGroup.TAB_MISC).setISTER(() -> () -> ister)); - item.setRegistryName(new ResourceLocation("mcgltf", "example_item")); - event.getRegistry().register(item); - - blockItem = new BlockItem(EXAMPLE_BLOCK, new Item.Properties().tab(ItemGroup.TAB_MISC).setISTER(() -> () -> ister)); - blockItem.setRegistryName(EXAMPLE_BLOCK.getRegistryName()); - event.getRegistry().register(blockItem); - - ForgeSpawnEggItem spawnEggItem = new ForgeSpawnEggItem(() -> EXAMPLE_ENTITY_TYPE, 12422002, 5651507, new Item.Properties().tab(ItemGroup.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 FMLClientSetupEvent event) { - ClientRegistry.bindTileEntityRenderer(EXAMPLE_TILE_ENTITY_TYPE, (dispatcher) -> { - ExampleTileEntityRenderer ter = new ExampleTileEntityRenderer(dispatcher); - MCglTF.getInstance().addGltfModelReceiver(ter); - return ter; - }); - - RenderingRegistry.registerEntityRenderingHandler(EXAMPLE_ENTITY_TYPE, new IRenderFactory() { - - @Override - public EntityRenderer createRenderFor(EntityRendererManager manager) { - ExampleEntityRenderer entityRenderer = new ExampleEntityRenderer(manager); - 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 = BlockEntityType.Builder.of(ExampleBlockEntity::new, exampleBlock).build(null); + 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/ExampleBlock.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlock.java index d65ab63..87461d2 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleBlock.java +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlock.java @@ -1,19 +1,20 @@ package com.timlee9024.mcgltf.example; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalBlock; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.StateContainer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.math.shapes.VoxelShape; -import net.minecraft.util.math.shapes.VoxelShapes; -import net.minecraft.world.IBlockReader; - -public class ExampleBlock extends HorizontalBlock { +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class ExampleBlock extends HorizontalDirectionalBlock implements EntityBlock { protected ExampleBlock(Properties p_i48377_1_) { super(p_i48377_1_); @@ -21,27 +22,22 @@ protected ExampleBlock(Properties p_i48377_1_) { } @Override - public boolean hasTileEntity(BlockState state) { - return true; - } - - @Override - public TileEntity createTileEntity(BlockState state, IBlockReader world) { - return new ExampleTileEntity(); + public BlockEntity newBlockEntity(BlockGetter var1) { + return new ExampleBlockEntity(); } @Override - public boolean propagatesSkylightDown(BlockState p_200123_1_, IBlockReader p_200123_2_, BlockPos p_200123_3_) { + public boolean propagatesSkylightDown(BlockState p_200123_1_, BlockGetter p_200123_2_, BlockPos p_200123_3_) { return true; } @Override - public BlockState getStateForPlacement(BlockItemUseContext p_196258_1_) { + public BlockState getStateForPlacement(BlockPlaceContext p_196258_1_) { return defaultBlockState().setValue(FACING, p_196258_1_.getHorizontalDirection().getOpposite()); } @Override - protected void createBlockStateDefinition(StateContainer.Builder p_206840_1_) { + protected void createBlockStateDefinition(StateDefinition.Builder p_206840_1_) { p_206840_1_.add(FACING); } @@ -51,13 +47,13 @@ public boolean skipRendering(BlockState p_200122_1_, BlockState p_200122_2_, Dir } @Override - public float getShadeBrightness(BlockState p_220080_1_, IBlockReader p_220080_2_, BlockPos p_220080_3_) { + public float getShadeBrightness(BlockState p_220080_1_, BlockGetter p_220080_2_, BlockPos p_220080_3_) { return 1.0F; } @Override - public VoxelShape getVisualShape(BlockState p_230322_1_, IBlockReader p_230322_2_, BlockPos p_230322_3_, ISelectionContext p_230322_4_) { - return VoxelShapes.empty(); + public VoxelShape getVisualShape(BlockState p_230322_1_, BlockGetter p_230322_2_, BlockPos p_230322_3_, CollisionContext p_230322_4_) { + return Shapes.empty(); } } diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntity.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntity.java new file mode 100644 index 0000000..d29ed85 --- /dev/null +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntity.java @@ -0,0 +1,11 @@ +package com.timlee9024.mcgltf.example; + +import net.minecraft.world.level.block.entity.BlockEntity; + +public class ExampleBlockEntity extends BlockEntity { + + public ExampleBlockEntity() { + super(Example.INSTANCE.exampleBlockEntityType); + } + +} diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleTileEntityRenderer.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntityRenderer.java similarity index 73% rename from src/main/java/com/timlee9024/mcgltf/example/ExampleTileEntityRenderer.java rename to src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntityRenderer.java index bed841b..6433b3d 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleTileEntityRenderer.java +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleBlockEntityRenderer.java @@ -9,8 +9,8 @@ import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL30; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.timlee9024.mcgltf.IGltfModelReceiver; import com.timlee9024.mcgltf.MCglTF; import com.timlee9024.mcgltf.RenderedGltfModel; @@ -19,22 +19,21 @@ import com.timlee9024.mcgltf.animation.InterpolatedChannel; import de.javagl.jgltf.model.AnimationModel; -import net.minecraft.block.HorizontalBlock; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.tileentity.TileEntityRenderer; -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; -import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.client.model.animation.Animation; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; -public class ExampleTileEntityRenderer extends TileEntityRenderer implements IGltfModelReceiver { +public class ExampleBlockEntityRenderer extends BlockEntityRenderer implements IGltfModelReceiver { protected RenderedGltfScene renderedScene; protected List> animations; - public ExampleTileEntityRenderer(TileEntityRendererDispatcher p_i226006_1_) { + public ExampleBlockEntityRenderer(BlockEntityRenderDispatcher p_i226006_1_) { super(p_i226006_1_); } @@ -54,11 +53,11 @@ public void onReceiveSharedModel(RenderedGltfModel renderedModel) { } /** - * Since you use custom ISTER for BlockItem instead of TER to render item form of block, - * the last parameters p_225616_6_ 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_225616_6_ which control overlay color is almost never used. */ @Override - public void render(ExampleTileEntity p_225616_1_, float p_225616_2_, MatrixStack p_225616_3_, IRenderTypeBuffer p_225616_4_, int p_225616_5_, int p_225616_6_) { + public void render(ExampleBlockEntity p_225616_1_, float p_225616_2_, PoseStack p_225616_3_, MultiBufferSource p_225616_4_, int p_225616_5_, int p_225616_6_) { GL11.glPushMatrix(); GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); @@ -71,9 +70,9 @@ public void render(ExampleTileEntity p_225616_1_, float p_225616_2_, MatrixStack GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); RenderSystem.multMatrix(p_225616_3_.last().pose()); - World world = p_225616_1_.getLevel(); - if(world != null) { - float time = Animation.getWorldTime(world, p_225616_2_); + Level level = p_225616_1_.getLevel(); + if(level != null) { + float time = (level.getGameTime() + p_225616_2_) / 20; //Play every animation clips simultaneously for(List animation : animations) { animation.parallelStream().forEach((channel) -> { @@ -83,7 +82,7 @@ public void render(ExampleTileEntity p_225616_1_, float p_225616_2_, MatrixStack } GL11.glTranslatef(0.5F, 0.0F, 0.5F); //Make sure it is in the center of the block - switch(world.getBlockState(p_225616_1_.getBlockPos()).getOptionalValue(HorizontalBlock.FACING).orElse(Direction.NORTH)) { + switch(level.getBlockState(p_225616_1_.getBlockPos()).getOptionalValue(HorizontalDirectionalBlock.FACING).orElse(Direction.NORTH)) { case DOWN: break; case UP: 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..fd43464 --- /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.rendereregistry.v1.BlockEntityRendererRegistry; +import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; +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.INSTANCE.register(Example.INSTANCE.exampleBlockEntityType, (dispatcher) -> { + ExampleBlockEntityRenderer ber = new ExampleBlockEntityRenderer(dispatcher); + MCglTF.getInstance().addGltfModelReceiver(ber); + return ber; + }); + + EntityRendererRegistry.INSTANCE.register(Example.INSTANCE.exampleEntityType, (dispatcher, context) -> { + ExampleEntityRenderer entityRenderer = new ExampleEntityRenderer(dispatcher); + 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/ExampleEntity.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleEntity.java index a9b1774..9e6782a 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleEntity.java +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleEntity.java @@ -1,12 +1,12 @@ package com.timlee9024.mcgltf.example; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.merchant.villager.VillagerEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.level.Level; -public class ExampleEntity extends VillagerEntity { +public class ExampleEntity extends Villager { - public ExampleEntity(EntityType p_i50182_1_, World p_i50182_2_) { + public ExampleEntity(EntityType p_i50182_1_, Level p_i50182_2_) { super(p_i50182_1_, p_i50182_2_); } diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleEntityRenderer.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleEntityRenderer.java index 4063f1c..b5552c7 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleEntityRenderer.java +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleEntityRenderer.java @@ -9,8 +9,8 @@ import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL30; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.timlee9024.mcgltf.IGltfModelReceiver; import com.timlee9024.mcgltf.MCglTF; import com.timlee9024.mcgltf.RenderedGltfModel; @@ -19,12 +19,11 @@ import com.timlee9024.mcgltf.animation.InterpolatedChannel; import de.javagl.jgltf.model.AnimationModel; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.EntityRenderer; -import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.MathHelper; -import net.minecraftforge.client.model.animation.Animation; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; public class ExampleEntityRenderer extends EntityRenderer implements IGltfModelReceiver { @@ -32,7 +31,7 @@ public class ExampleEntityRenderer extends EntityRenderer impleme protected List> animations; - protected ExampleEntityRenderer(EntityRendererManager p_i46179_1_) { + protected ExampleEntityRenderer(EntityRenderDispatcher p_i46179_1_) { super(p_i46179_1_); } @@ -57,8 +56,8 @@ public ResourceLocation getTextureLocation(ExampleEntity p_110775_1_) { } @Override - public void render(ExampleEntity p_225623_1_, float p_225623_2_, float p_225623_3_, MatrixStack p_225623_4_, IRenderTypeBuffer p_225623_5_, int p_225623_6_) { - float time = Animation.getWorldTime(p_225623_1_.level, p_225623_3_); + public void render(ExampleEntity p_225623_1_, float p_225623_2_, float p_225623_3_, PoseStack p_225623_4_, MultiBufferSource p_225623_5_, int p_225623_6_) { + float time = (p_225623_1_.level.getGameTime() + p_225623_3_) / 20; //Play every animation clips simultaneously for(List animation : animations) { animation.parallelStream().forEach((channel) -> { @@ -79,7 +78,7 @@ public void render(ExampleEntity p_225623_1_, float p_225623_2_, float p_225623_ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); RenderSystem.multMatrix(p_225623_4_.last().pose()); - GL11.glRotatef(MathHelper.rotLerp(p_225623_3_, p_225623_1_.yBodyRotO, p_225623_1_.yBodyRot), 0.0F, 1.0F, 0.0F); + GL11.glRotatef(Mth.rotLerp(p_225623_3_, p_225623_1_.yBodyRotO, p_225623_1_.yBodyRot), 0.0F, 1.0F, 0.0F); GL13.glMultiTexCoord2s(GL13.GL_TEXTURE2, (short)(p_225623_6_ & '\uffff'), (short)(p_225623_6_ >> 16 & '\uffff')); diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleItemRenderer.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleItemRenderer.java index 0b63361..73181b4 100644 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleItemRenderer.java +++ b/src/main/java/com/timlee9024/mcgltf/example/ExampleItemRenderer.java @@ -9,8 +9,8 @@ import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL30; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.timlee9024.mcgltf.IGltfModelReceiver; import com.timlee9024.mcgltf.MCglTF; import com.timlee9024.mcgltf.RenderedGltfModel; @@ -19,12 +19,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.IRenderTypeBuffer; -import net.minecraft.client.renderer.model.ItemCameraTransforms; -import net.minecraftforge.client.model.animation.Animation; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.world.item.ItemStack; -public abstract class ExampleItemRenderer implements IGltfModelReceiver { +public abstract class ExampleItemRenderer implements IGltfModelReceiver, BuiltinItemRendererRegistry.DynamicItemRenderer { protected RenderedGltfScene renderedScene; @@ -39,10 +40,11 @@ public void onReceiveSharedModel(RenderedGltfModel renderedModel) { animations.add(GltfAnimationCreator.createGltfAnimation(animationModel)); } } - - public void render(ItemCameraTransforms.TransformType p_239207_2_, MatrixStack p_239207_3_, IRenderTypeBuffer p_239207_4_, int p_239207_5_, int p_239207_6_) { + + @Override + public void render(ItemStack stack, ItemTransforms.TransformType mode, PoseStack matrices, MultiBufferSource vertexConsumers, int light, int overlay) { Minecraft mc = Minecraft.getInstance(); - float time = Animation.getWorldTime(mc.level, Animation.getPartialTickTime()); + float time = (mc.level.getGameTime() + ExampleClient.INSTANCE.tickDelta) / 20; //Play every animation clips simultaneously for(List animation : animations) { animation.parallelStream().forEach((channel) -> { @@ -58,9 +60,9 @@ public void render(ItemCameraTransforms.TransformType p_239207_2_, MatrixStack p GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glEnable(GL11.GL_COLOR_MATERIAL); - RenderSystem.multMatrix(p_239207_3_.last().pose()); + RenderSystem.multMatrix(matrices.last().pose()); - switch(p_239207_2_) { + switch(mode) { case THIRD_PERSON_LEFT_HAND: case THIRD_PERSON_RIGHT_HAND: case HEAD: @@ -69,8 +71,8 @@ public void render(ItemCameraTransforms.TransformType p_239207_2_, MatrixStack p GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL13.glMultiTexCoord2s(GL13.GL_TEXTURE1, (short)(p_239207_6_ & '\uffff'), (short)(p_239207_6_ >> 16 & '\uffff')); - GL13.glMultiTexCoord2s(GL13.GL_TEXTURE2, (short)(p_239207_5_ & '\uffff'), (short)(p_239207_5_ >> 16 & '\uffff')); + GL13.glMultiTexCoord2s(GL13.GL_TEXTURE1, (short)(overlay & '\uffff'), (short)(overlay >> 16 & '\uffff')); + GL13.glMultiTexCoord2s(GL13.GL_TEXTURE2, (short)(light & '\uffff'), (short)(light >> 16 & '\uffff')); if(MCglTF.getInstance().isShaderModActive()) { renderedScene.renderForShaderMod(); @@ -93,7 +95,7 @@ public void render(ItemCameraTransforms.TransformType p_239207_2_, MatrixStack p GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL13.glMultiTexCoord2s(GL13.GL_TEXTURE2, (short)(p_239207_5_ & '\uffff'), (short)(p_239207_5_ >> 16 & '\uffff')); + GL13.glMultiTexCoord2s(GL13.GL_TEXTURE2, (short)(light & '\uffff'), (short)(light >> 16 & '\uffff')); if(MCglTF.getInstance().isShaderModActive()) { renderedScene.renderForShaderMod(); diff --git a/src/main/java/com/timlee9024/mcgltf/example/ExampleTileEntity.java b/src/main/java/com/timlee9024/mcgltf/example/ExampleTileEntity.java deleted file mode 100644 index 959cd36..0000000 --- a/src/main/java/com/timlee9024/mcgltf/example/ExampleTileEntity.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.timlee9024.mcgltf.example; - -import net.minecraft.tileentity.TileEntity; - -public class ExampleTileEntity extends TileEntity { - - public ExampleTileEntity() { - super(Example.EXAMPLE_TILE_ENTITY_TYPE); - } - -} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml deleted file mode 100644 index 427dda8..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="[36,)" #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.16.5-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.16.5-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="[36,)" #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.16.5,1.17)" - ordering="NONE" - side="BOTH" -[[dependencies.example_mcgltf_usage]] - modId="mcgltf" - mandatory=false - versionRange="[1.16.5-Forge-1.1.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..774f6b9 --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,41 @@ +{ + "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.16.5-Fabric", + "sources": "https://github.com/TimLee9024/MCglTF-Example/tree/1.16.5-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.7.4", + "fabric": "*", + "minecraft": "1.16.x" + }, + "suggests": { + "optifabric": "*" + }, + "conflicts": { + "iris": "*" + } +} diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta deleted file mode 100644 index 8ac53ef..0000000 --- a/src/main/resources/pack.mcmeta +++ /dev/null @@ -1,7 +0,0 @@ -{ - "pack": { - "description": "MCglTF Example resources", - "pack_format": 6, - "_comment": "A pack_format of 6 requires json lang files and some texture changes from 1.16.2. Note: we require v6 pack meta for all mods." - } -} diff --git a/updates.json b/updates.json deleted file mode 100644 index c206f85..0000000 --- a/updates.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "homepage": "https://github.com/TimLee9024/MCglTF-Example/releases", - "1.16.5": { - "1.16.5-Forge-1.2.0.0": "Update to compatible with MCglTF-1.2.0.0", - "1.16.5-Forge-1.1.0.1": "Fix homepage URL and server side item registration", - "1.16.5-Forge-1.1.0.0": "Update to work with MCglTF version 1.16.5-Forge-1.1.0.0", - "1.16.5-Forge-1.0.0.0": "Initial release" - }, - "promos": { - "1.16.5-latest": "1.16.5-Forge-1.2.0.0", - "1.16.5-recommended": "1.16.5-Forge-1.2.0.0" - } -} \ No newline at end of file