瀏覽代碼

Reformat and bump version

Max 4 年之前
父節點
當前提交
428f98be44
共有 88 個文件被更改,包括 395 次插入330 次删除
  1. 76 120
      LICENSE.md
  2. 17 5
      README.md
  3. 3 3
      build.gradle
  4. 4 4
      common/src/main/java/me/shedaniel/architectury/PlatformMethods.java
  5. 2 1
      common/src/main/java/me/shedaniel/architectury/event/EventFactory.java
  6. 2 1
      common/src/main/java/me/shedaniel/architectury/event/EventHandler.java
  7. 4 2
      common/src/main/java/me/shedaniel/architectury/event/events/LifecycleEvent.java
  8. 8 4
      common/src/main/java/me/shedaniel/architectury/event/events/TickEvent.java
  9. 8 4
      common/src/main/java/me/shedaniel/architectury/event/events/client/ClientLifecycleEvent.java
  10. 4 2
      common/src/main/java/me/shedaniel/architectury/event/events/client/ClientTickEvent.java
  11. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/BlockEntityHooks.java
  12. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/DyeColorHooks.java
  13. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/EntityHooks.java
  14. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/ExplosionHooks.java
  15. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/FluidStackHooks.java
  16. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/ItemEntityHooks.java
  17. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/ItemStackHooks.java
  18. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/LevelResourceHooks.java
  19. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/PackRepositoryHooks.java
  20. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/PlayerHooks.java
  21. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/ScreenHooks.java
  22. 2 1
      common/src/main/java/me/shedaniel/architectury/hooks/TagHooks.java
  23. 10 11
      common/src/main/java/me/shedaniel/architectury/hooks/biome/BiomeHooks.java
  24. 0 1
      common/src/main/java/me/shedaniel/architectury/hooks/biome/ClimateProperties.java
  25. 3 2
      common/src/main/java/me/shedaniel/architectury/platform/Platform.java
  26. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/BlockEntityRenderers.java
  27. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/ColorHandlers.java
  28. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/CreativeTabs.java
  29. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/CriteriaTriggersRegistry.java
  30. 8 8
      common/src/main/java/me/shedaniel/architectury/registry/DeferredRegister.java
  31. 6 5
      common/src/main/java/me/shedaniel/architectury/registry/GameRuleFactory.java
  32. 4 3
      common/src/main/java/me/shedaniel/architectury/registry/GameRuleRegistry.java
  33. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/KeyBindings.java
  34. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/MenuRegistry.java
  35. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/ReloadListeners.java
  36. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/RenderTypes.java
  37. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/entity/EntityAttributes.java
  38. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/entity/EntityRenderers.java
  39. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java
  40. 2 1
      common/src/main/java/me/shedaniel/architectury/registry/trade/TradeRegistry.java
  41. 2 1
      common/src/main/java/me/shedaniel/architectury/utils/EnvExecutor.java
  42. 2 1
      common/src/main/java/me/shedaniel/architectury/utils/NbtType.java
  43. 4 4
      common/src/main/java/me/shedaniel/architectury/utils/PlatformExpectedError.java
  44. 2 1
      common/src/main/java/me/shedaniel/architectury/utils/Value.java
  45. 5 1
      common/src/main/resources/architectury-common.mixins.json
  46. 1 1
      fabric/src/main/java/me/shedaniel/architectury/compat/fabric/ModMenuCompatibility.java
  47. 0 1
      fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/BlockEntityHooksImpl.java
  48. 2 2
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/ExplosionPreInvoker.java
  49. 1 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java
  50. 1 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinCommands.java
  51. 22 7
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinExplosion.java
  52. 0 4
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFarmBlock.java
  53. 3 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFurnaceResultSlot.java
  54. 3 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinLevelChunk.java
  55. 2 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinNaturalSpawner.java
  56. 2 2
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPhantomSpawner.java
  57. 2 2
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayer.java
  58. 3 2
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayerAdvancements.java
  59. 8 4
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinResultSlot.java
  60. 8 6
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerGamePacketListenerImpl.java
  61. 1 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerLevel.java
  62. 1 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java
  63. 6 4
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayerGameMode.java
  64. 9 5
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinClientPacketListener.java
  65. 5 3
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinGameRenderer.java
  66. 4 4
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinKeyboardHandler.java
  67. 14 10
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMinecraft.java
  68. 5 5
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMouseHandler.java
  69. 1 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMultiPlayerGameMode.java
  70. 9 5
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinScreen.java
  71. 1 1
      fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinTextureAtlas.java
  72. 20 20
      fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BiomeModificationsImpl.java
  73. 3 3
      fabric/src/main/java/me/shedaniel/architectury/registry/fabric/GameRuleFactoryImpl.java
  74. 1 1
      forge/build.gradle
  75. 2 1
      forge/src/main/java/me/shedaniel/architectury/hooks/forge/FluidStackHooksForge.java
  76. 0 1
      forge/src/main/java/me/shedaniel/architectury/networking/forge/NetworkManagerImpl.java
  77. 2 1
      forge/src/main/java/me/shedaniel/architectury/platform/forge/EventBuses.java
  78. 0 1
      forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java
  79. 6 2
      forge/src/main/java/me/shedaniel/architectury/registry/forge/BiomeModificationsImpl.java
  80. 2 1
      forge/src/main/java/me/shedaniel/architectury/registry/forge/GameRuleFactoryImpl.java
  81. 1 1
      forge/src/main/resources/META-INF/mods.toml
  82. 11 3
      forge/src/main/resources/architectury.mixins.json
  83. 1 1
      gradle.properties
  84. 0 1
      testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java
  85. 4 3
      testmod-common/src/main/java/me/shedaniel/architectury/test/gamerule/TestGameRules.java
  86. 1 1
      testmod-common/src/main/java/me/shedaniel/architectury/test/trade/TestTrades.java
  87. 4 4
      testmod-common/src/main/resources/data/architectury-test/tags/blocks/heart_particles2.json
  88. 1 1
      testmod-forge/build.gradle

+ 76 - 120
LICENSE.md

@@ -4,160 +4,116 @@ GNU Lesser General Public License
 _Version 3, 29 June 2007_  
 _Copyright © 2007 Free Software Foundation, Inc. &lt;<http://fsf.org/>&gt;_
 
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
 
-
-This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
+This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU
+General Public License, supplemented by the additional permissions listed below.
 
 ### 0. Additional Definitions
 
-As used herein, “this License” refers to version 3 of the GNU Lesser
-General Public License, and the “GNU GPL” refers to version 3 of the GNU
-General Public License.
+As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to
+version 3 of the GNU General Public License.
 
-“The Library” refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
+“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined
+below.
 
-An “Application” is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
+An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on
+the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by
+the Library.
 
-A “Combined Work” is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the “Linked
-Version”.
+A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of
+the Library with which the Combined Work was made is also called the “Linked Version”.
 
-The “Minimal Corresponding Source” for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
+The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding
+any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not
+on the Linked Version.
 
-The “Corresponding Application Code” for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
+The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application,
+including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the
+System Libraries of the Combined Work.
 
 ### 1. Exception to Section 3 of the GNU GPL
 
-You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
+You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
 
 ### 2. Conveying Modified Versions
 
-If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
+If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied
+by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may
+convey a copy of the modified version:
 
-* **a)** under this License, provided that you make a good faith effort to
-  ensure that, in the event an Application does not supply the
-  function or data, the facility still operates, and performs
-  whatever part of its purpose remains meaningful, or
+* **a)** under this License, provided that you make a good faith effort to ensure that, in the event an Application does
+  not supply the function or data, the facility still operates, and performs whatever part of its purpose remains
+  meaningful, or
 
-* **b)** under the GNU GPL, with none of the additional permissions of
-  this License applicable to that copy.
+* **b)** under the GNU GPL, with none of the additional permissions of this License applicable to that copy.
 
 ### 3. Object Code Incorporating Material from Library Header Files
 
-The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
+The object code form of an Application may incorporate material from a header file that is part of the Library. You may
+convey such object code under terms of your choice, provided that, if the incorporated material is not limited to
+numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates
 (ten or fewer lines in length), you do both of the following:
 
-* **a)** Give prominent notice with each copy of the object code that the
-  Library is used in it and that the Library and its use are
-  covered by this License.
-* **b)** Accompany the object code with a copy of the GNU GPL and this license
-  document.
+* **a)** Give prominent notice with each copy of the object code that the Library is used in it and that the Library and
+  its use are covered by this License.
+* **b)** Accompany the object code with a copy of the GNU GPL and this license document.
 
 ### 4. Combined Works
 
-You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
+You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification
+of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications,
+if you also do each of the following:
 
-* **a)** Give prominent notice with each copy of the Combined Work that
-  the Library is used in it and that the Library and its use are
-  covered by this License.
+* **a)** Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library
+  and its use are covered by this License.
 
-* **b)** Accompany the Combined Work with a copy of the GNU GPL and this license
-  document.
+* **b)** Accompany the Combined Work with a copy of the GNU GPL and this license document.
 
-* **c)** For a Combined Work that displays copyright notices during
-  execution, include the copyright notice for the Library among
-  these notices, as well as a reference directing the user to the
-  copies of the GNU GPL and this license document.
+* **c)** For a Combined Work that displays copyright notices during execution, include the copyright notice for the
+  Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license
+  document.
 
 * **d)** Do one of the following:
-    - **0)** Convey the Minimal Corresponding Source under the terms of this
-      License, and the Corresponding Application Code in a form
-      suitable for, and under terms that permit, the user to
-      recombine or relink the Application with a modified version of
-      the Linked Version to produce a modified Combined Work, in the
-      manner specified by section 6 of the GNU GPL for conveying
-      Corresponding Source.
-    - **1)** Use a suitable shared library mechanism for linking with the
-      Library.  A suitable mechanism is one that **(a)** uses at run time
-      a copy of the Library already present on the user's computer
-      system, and **(b)** will operate properly with a modified version
-      of the Library that is interface-compatible with the Linked
-      Version.
-
-* **e)** Provide Installation Information, but only if you would otherwise
-  be required to provide such information under section 6 of the
-  GNU GPL, and only to the extent that such information is
-  necessary to install and execute a modified version of the
-  Combined Work produced by recombining or relinking the
-  Application with a modified version of the Linked Version. (If
-  you use option **4d0**, the Installation Information must accompany
-  the Minimal Corresponding Source and Corresponding Application
-  Code. If you use option **4d1**, you must provide the Installation
-  Information in the manner specified by section 6 of the GNU GPL
-  for conveying Corresponding Source.)
+    - **0)** Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application
+      Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a
+      modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6
+      of the GNU GPL for conveying Corresponding Source.
+    - **1)** Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that **(
+      a)** uses at run time a copy of the Library already present on the user's computer system, and **(b)** will
+      operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
+
+* **e)** Provide Installation Information, but only if you would otherwise be required to provide such information under
+  section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified
+  version of the Combined Work produced by recombining or relinking the Application with a modified version of the
+  Linked Version. (If you use option **4d0**, the Installation Information must accompany the Minimal Corresponding
+  Source and Corresponding Application Code. If you use option **4d1**, you must provide the Installation Information in
+  the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)
 
 ### 5. Combined Libraries
 
-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 that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
+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 that are not Applications and are not covered by this License, and convey such a combined
+library under terms of your choice, if you do both of the following:
 
-* **a)** Accompany the combined library with a copy of the same work based
-  on the Library, uncombined with any other library facilities,
-  conveyed under the terms of this License.
-* **b)** Give prominent notice with the combined library that part of it
-  is a work based on the Library, and explaining where to find the
-  accompanying uncombined form of the same work.
+* **a)** Accompany the combined library with a copy of the same work based on the Library, uncombined with any other
+  library facilities, conveyed under the terms of this License.
+* **b)** Give prominent notice with the combined library that part of it is a work based on the Library, and explaining
+  where to find the accompanying uncombined form of the same work.
 
 ### 6. Revised Versions of the GNU Lesser General Public License
 
-The Free Software Foundation may publish revised and/or new versions
-of the GNU 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 as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License “or any later version”
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
+The Free Software Foundation may publish revised and/or new versions of the GNU 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 as you received it specifies that a certain
+numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of
+following the terms and conditions either of that published version or of any later version published by the Free
+Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General
+Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software
+Foundation.
+
+If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General
+Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for
+you to choose that version for the Library.

+ 17 - 5
README.md

@@ -1,26 +1,38 @@
 # Architectury API
+
 Talk to us on [Discord](https://discord.gg/C2RdJDpRBP)!
 
 An intermediary api aimed to ease developing multiplatform mods.
 
 ### What is Architectury API
-Architectury API is an api to abstract calls to fabric api and forge api as both loader has different implementations of what can be perceived as the same thing.
 
-Architectury API updates regularly, with new hooks and features. Currently contains over **90** events hooks, networking abstraction, loader calls abstraction, game registry abstraction and an easy to use @ExpectPlatform annotation (Only works on static methods).
+Architectury API is an api to abstract calls to fabric api and forge api as both loader has different implementations of
+what can be perceived as the same thing.
+
+Architectury API updates regularly, with new hooks and features. Currently contains over **90** events hooks, networking
+abstraction, loader calls abstraction, game registry abstraction and an easy to use @ExpectPlatform annotation (Only
+works on static methods).
 
 ### Do I really need this API?
-Architectury API is only one part of the architectury ecosystem, **Architectury Plugin** is the gradle plugin enabling all this multiplatform actions.
 
-Architectury API is optional for projects built on architectury, you may create your architectury project with just Architectury Plugin.
+Architectury API is only one part of the architectury ecosystem, **Architectury Plugin** is the gradle plugin enabling
+all this multiplatform actions.
+
+Architectury API is optional for projects built on architectury, you may create your architectury project with just
+Architectury Plugin.
 
 ### Advantages of Architectury
+
 - Open sourced
 - Less boilerplate for your multiplatform mod
 
 ### Getting started with making multiplatform mods
+
 Gradle Plugin: https://github.com/architectury/architectury-plugin
 
 Example Mod: https://github.com/architectury/architectury-example-mod
 
 ### Credits
-This library bundles typetools, which you can find its license [here](https://github.com/jhalterman/typetools/blob/master/LICENSE.txt "")
+
+This library bundles typetools, which you can find its
+license [here](https://github.com/jhalterman/typetools/blob/master/LICENSE.txt "")

+ 3 - 3
build.gradle

@@ -23,11 +23,11 @@ allprojects {
     apply plugin: "java"
     apply plugin: "architectury-plugin"
     apply plugin: "org.cadixdev.licenser"
-    
+
     ext {
         isSnapshot = System.getenv("PR_NUM") != null
     }
-    
+
     def runNumber = (System.getenv("GITHUB_RUN_NUMBER") == null ? "9999" : System.getenv("GITHUB_RUN_NUMBER"))
 
     if (!ext.isSnapshot) {
@@ -37,7 +37,7 @@ allprojects {
         version = rootProject.base_version + "-PR." + System.getenv("PR_NUM") + "." + runNumber
         archivesBaseName = rootProject.archives_base_name_snapshot
     }
-    
+
     group = rootProject.maven_group
 
     tasks.withType(JavaCompile) {

+ 4 - 4
common/src/main/java/me/shedaniel/architectury/PlatformMethods.java

@@ -32,23 +32,23 @@ public class PlatformMethods {
         String lookupType = lookupClass.getName().replace("$", "") + "Impl";
         
         String platformExpectedClass = lookupType.substring(0, lookupType.lastIndexOf('.')) + "." + ArchitecturyTarget.getCurrentTarget() + "." +
-                                       lookupType.substring(lookupType.lastIndexOf('.') + 1);
+                lookupType.substring(lookupType.lastIndexOf('.') + 1);
         Class<?> newClass;
         try {
             newClass = Class.forName(platformExpectedClass, false, lookupClass.getClassLoader());
         } catch (ClassNotFoundException exception) {
             throw new PlatformExpectedError(lookupClass.getName() + "#" + name + " expected platform implementation in " + platformExpectedClass +
-                                            "#" + name + ", but the class doesn't exist!", exception);
+                    "#" + name + ", but the class doesn't exist!", exception);
         }
         MethodHandle platformMethod;
         try {
             platformMethod = lookup.findStatic(newClass, name, type);
         } catch (NoSuchMethodException exception) {
             throw new PlatformExpectedError(lookupClass.getName() + "#" + name + " expected platform implementation in " + platformExpectedClass +
-                                            "#" + name + ", but the method doesn't exist!", exception);
+                    "#" + name + ", but the method doesn't exist!", exception);
         } catch (IllegalAccessException exception) {
             throw new PlatformExpectedError(lookupClass.getName() + "#" + name + " expected platform implementation in " + platformExpectedClass +
-                                            "#" + name + ", but the method's modifier doesn't match the access requirements!", exception);
+                    "#" + name + ", but the method's modifier doesn't match the access requirements!", exception);
         }
         return new ConstantCallSite(platformMethod);
     }

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/event/EventFactory.java

@@ -39,7 +39,8 @@ import java.util.function.Consumer;
 import java.util.function.Function;
 
 public final class EventFactory {
-    private EventFactory() {}
+    private EventFactory() {
+    }
     
     @Deprecated
     @ApiStatus.ScheduledForRemoval

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/event/EventHandler.java

@@ -29,7 +29,8 @@ import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
 
 public final class EventHandler {
-    private EventHandler() {}
+    private EventHandler() {
+    }
     
     private static boolean initialized = false;
     

+ 4 - 2
common/src/main/java/me/shedaniel/architectury/event/events/LifecycleEvent.java

@@ -63,11 +63,13 @@ public interface LifecycleEvent {
         void stateChanged(T instance);
     }
     
-    interface ServerState extends InstanceState<MinecraftServer> {}
+    interface ServerState extends InstanceState<MinecraftServer> {
+    }
     
     interface WorldState<T extends Level> {
         void act(T world);
     }
     
-    interface ServerWorldState extends WorldState<ServerLevel> {}
+    interface ServerWorldState extends WorldState<ServerLevel> {
+    }
 }

+ 8 - 4
common/src/main/java/me/shedaniel/architectury/event/events/TickEvent.java

@@ -35,11 +35,15 @@ public interface TickEvent<T> {
     
     void tick(T instance);
     
-    interface Server extends TickEvent<MinecraftServer> {}
+    interface Server extends TickEvent<MinecraftServer> {
+    }
     
-    interface WorldTick<T extends Level> extends TickEvent<T> {}
+    interface WorldTick<T extends Level> extends TickEvent<T> {
+    }
     
-    interface ServerWorld extends WorldTick<ServerLevel> {}
+    interface ServerWorld extends WorldTick<ServerLevel> {
+    }
     
-    interface Player extends TickEvent<net.minecraft.world.entity.player.Player> {}
+    interface Player extends TickEvent<net.minecraft.world.entity.player.Player> {
+    }
 }

+ 8 - 4
common/src/main/java/me/shedaniel/architectury/event/events/client/ClientLifecycleEvent.java

@@ -32,11 +32,13 @@ public interface ClientLifecycleEvent {
     /**
      * Invoked when client has been initialised, not available in forge.
      */
-    @Deprecated Event<ClientState> CLIENT_STARTED = EventFactory.createLoop();
+    @Deprecated
+    Event<ClientState> CLIENT_STARTED = EventFactory.createLoop();
     /**
      * Invoked when client is stopping, not available in forge.
      */
-    @Deprecated Event<ClientState> CLIENT_STOPPING = EventFactory.createLoop();
+    @Deprecated
+    Event<ClientState> CLIENT_STOPPING = EventFactory.createLoop();
     /**
      * Invoked after a world is loaded only on client, equivalent to forge's {@code WorldEvent.Load}.
      */
@@ -44,8 +46,10 @@ public interface ClientLifecycleEvent {
     Event<ClientState> CLIENT_SETUP = EventFactory.createLoop();
     
     @Environment(EnvType.CLIENT)
-    interface ClientState extends LifecycleEvent.InstanceState<Minecraft> {}
+    interface ClientState extends LifecycleEvent.InstanceState<Minecraft> {
+    }
     
     @Environment(EnvType.CLIENT)
-    interface ClientWorldState extends LifecycleEvent.WorldState<ClientLevel> {}
+    interface ClientWorldState extends LifecycleEvent.WorldState<ClientLevel> {
+    }
 }

+ 4 - 2
common/src/main/java/me/shedaniel/architectury/event/events/client/ClientTickEvent.java

@@ -36,8 +36,10 @@ public interface ClientTickEvent<T> {
     void tick(T instance);
     
     @Environment(EnvType.CLIENT)
-    interface Client extends ClientTickEvent<Minecraft> {}
+    interface Client extends ClientTickEvent<Minecraft> {
+    }
     
     @Environment(EnvType.CLIENT)
-    interface ClientWorld extends ClientTickEvent<ClientLevel> {}
+    interface ClientWorld extends ClientTickEvent<ClientLevel> {
+    }
 }

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/BlockEntityHooks.java

@@ -23,7 +23,8 @@ import me.shedaniel.architectury.ExpectPlatform;
 import net.minecraft.world.level.block.entity.BlockEntity;
 
 public class BlockEntityHooks {
-    private BlockEntityHooks() {}
+    private BlockEntityHooks() {
+    }
     
     /**
      * Sync data to the clients.

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/DyeColorHooks.java

@@ -23,7 +23,8 @@ import me.shedaniel.architectury.annotations.ExpectPlatform;
 import net.minecraft.world.item.DyeColor;
 
 public class DyeColorHooks {
-    private DyeColorHooks() {}
+    private DyeColorHooks() {
+    }
     
     @ExpectPlatform
     public static int getColorValue(DyeColor color) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/EntityHooks.java

@@ -25,7 +25,8 @@ import net.minecraft.world.phys.shapes.CollisionContext;
 import org.jetbrains.annotations.Nullable;
 
 public final class EntityHooks {
-    private EntityHooks() {}
+    private EntityHooks() {
+    }
     
     @ExpectPlatform
     public static String getEncodeId(Entity entity) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/ExplosionHooks.java

@@ -26,7 +26,8 @@ import net.minecraft.world.phys.Vec3;
 import org.jetbrains.annotations.Nullable;
 
 public final class ExplosionHooks {
-    private ExplosionHooks() {}
+    private ExplosionHooks() {
+    }
     
     @ExpectPlatform
     public static Vec3 getPosition(Explosion explosion) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/FluidStackHooks.java

@@ -35,7 +35,8 @@ import net.minecraft.world.level.material.FluidState;
 import org.jetbrains.annotations.Nullable;
 
 public class FluidStackHooks {
-    private FluidStackHooks() {}
+    private FluidStackHooks() {
+    }
     
     @ExpectPlatform
     public static Component getName(FluidStack stack) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/ItemEntityHooks.java

@@ -24,7 +24,8 @@ import me.shedaniel.architectury.utils.IntValue;
 import net.minecraft.world.entity.item.ItemEntity;
 
 public final class ItemEntityHooks {
-    private ItemEntityHooks() {}
+    private ItemEntityHooks() {
+    }
     
     /**
      * The lifespan of an {@link ItemEntity}.

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/ItemStackHooks.java

@@ -26,7 +26,8 @@ import net.minecraft.world.entity.item.ItemEntity;
 import net.minecraft.world.item.ItemStack;
 
 public final class ItemStackHooks {
-    private ItemStackHooks() {}
+    private ItemStackHooks() {
+    }
     
     public static ItemStack copyWithCount(ItemStack stack, int count) {
         ItemStack copy = stack.copy();

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/LevelResourceHooks.java

@@ -22,7 +22,8 @@ package me.shedaniel.architectury.hooks;
 import net.minecraft.world.level.storage.LevelResource;
 
 public class LevelResourceHooks {
-    private LevelResourceHooks() {}
+    private LevelResourceHooks() {
+    }
     
     public static LevelResource create(String id) {
         return new LevelResource(id);

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/PackRepositoryHooks.java

@@ -24,7 +24,8 @@ import net.minecraft.server.packs.repository.PackRepository;
 import net.minecraft.server.packs.repository.RepositorySource;
 
 public class PackRepositoryHooks {
-    private PackRepositoryHooks() {}
+    private PackRepositoryHooks() {
+    }
     
     @ExpectPlatform
     public static void addSource(PackRepository repository, RepositorySource source) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/PlayerHooks.java

@@ -23,7 +23,8 @@ import me.shedaniel.architectury.annotations.ExpectPlatform;
 import net.minecraft.world.entity.player.Player;
 
 public final class PlayerHooks {
-    private PlayerHooks() {}
+    private PlayerHooks() {
+    }
     
     @ExpectPlatform
     public static boolean isFake(Player player) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/ScreenHooks.java

@@ -30,7 +30,8 @@ import java.util.List;
 
 @Environment(EnvType.CLIENT)
 public final class ScreenHooks {
-    private ScreenHooks() {}
+    private ScreenHooks() {
+    }
     
     @ExpectPlatform
     public static List<AbstractWidget> getButtons(Screen screen) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/hooks/TagHooks.java

@@ -31,7 +31,8 @@ import net.minecraft.world.level.material.Fluid;
 import java.util.function.Supplier;
 
 public final class TagHooks {
-    private TagHooks() {}
+    private TagHooks() {
+    }
     
     @ExpectPlatform
     public static <T> Tag.Named<T> getOptional(ResourceLocation id, Supplier<TagCollection<T>> collection) {

+ 10 - 11
common/src/main/java/me/shedaniel/architectury/hooks/biome/BiomeHooks.java

@@ -31,7 +31,6 @@ import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver;
 import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
 import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
 import net.minecraft.world.level.levelgen.surfacebuilders.ConfiguredSurfaceBuilder;
-import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.util.List;
@@ -61,10 +60,10 @@ public final class BiomeHooks {
         }
         
         public BiomeWrapped(Biome biome,
-                ClimateProperties climateProperties,
-                EffectsProperties effectsProperties,
-                GenerationProperties generationProperties,
-                SpawnProperties spawnProperties) {
+                            ClimateProperties climateProperties,
+                            EffectsProperties effectsProperties,
+                            GenerationProperties generationProperties,
+                            SpawnProperties spawnProperties) {
             this.biome = biome;
             this.climateProperties = climateProperties;
             this.effectsProperties = effectsProperties;
@@ -110,8 +109,8 @@ public final class BiomeHooks {
     
     public static class MutableBiomeWrapped extends BiomeWrapped implements BiomeProperties.Mutable {
         public MutableBiomeWrapped(Biome biome,
-                GenerationProperties.Mutable generationProperties,
-                SpawnProperties.Mutable spawnProperties) {
+                                   GenerationProperties.Mutable generationProperties,
+                                   SpawnProperties.Mutable spawnProperties) {
             this(biome,
                     new ClimateWrapped(biome.climateSettings),
                     new EffectsWrapped(biome.getSpecialEffects()),
@@ -120,10 +119,10 @@ public final class BiomeHooks {
         }
         
         public MutableBiomeWrapped(Biome biome,
-                ClimateProperties.Mutable climateProperties,
-                EffectsProperties.Mutable effectsProperties,
-                GenerationProperties.Mutable generationProperties,
-                SpawnProperties.Mutable spawnProperties) {
+                                   ClimateProperties.Mutable climateProperties,
+                                   EffectsProperties.Mutable effectsProperties,
+                                   GenerationProperties.Mutable generationProperties,
+                                   SpawnProperties.Mutable spawnProperties) {
             super(biome,
                     climateProperties,
                     effectsProperties,

+ 0 - 1
common/src/main/java/me/shedaniel/architectury/hooks/biome/ClimateProperties.java

@@ -21,7 +21,6 @@ package me.shedaniel.architectury.hooks.biome;
 
 import net.minecraft.world.level.biome.Biome.Precipitation;
 import net.minecraft.world.level.biome.Biome.TemperatureModifier;
-import org.jetbrains.annotations.NotNull;
 
 public interface ClimateProperties {
     Precipitation getPrecipitation();

+ 3 - 2
common/src/main/java/me/shedaniel/architectury/platform/Platform.java

@@ -32,14 +32,15 @@ import java.util.Collection;
 import java.util.Optional;
 
 public final class Platform {
-    private Platform() {}
+    private Platform() {
+    }
     
     private static int simpleLoaderCache = -1;
     
     /**
      * @return the current mod loader, either "fabric" or "forge"
      * @deprecated does not reflect the true mod loader, "quilt" is never returned,
-     *             use {@link ArchitecturyTarget#getCurrentTarget()} instead.
+     * use {@link ArchitecturyTarget#getCurrentTarget()} instead.
      */
     @Deprecated
     @ApiStatus.ScheduledForRemoval(inVersion = "2.0")

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/BlockEntityRenderers.java

@@ -31,7 +31,8 @@ import java.util.function.Function;
 
 @Environment(EnvType.CLIENT)
 public final class BlockEntityRenderers {
-    private BlockEntityRenderers() {}
+    private BlockEntityRenderers() {
+    }
     
     @ExpectPlatform
     public static <T extends BlockEntity> void registerRenderer(BlockEntityType<T> type, Function<BlockEntityRenderDispatcher, BlockEntityRenderer<? super T>> provider) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/ColorHandlers.java

@@ -32,7 +32,8 @@ import java.util.function.Supplier;
 
 @Environment(EnvType.CLIENT)
 public final class ColorHandlers {
-    private ColorHandlers() {}
+    private ColorHandlers() {
+    }
     
     public static void registerItemColors(ItemColor color, ItemLike... items) {
         Supplier<ItemLike>[] array = new Supplier[items.length];

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/CreativeTabs.java

@@ -27,7 +27,8 @@ import net.minecraft.world.item.ItemStack;
 import java.util.function.Supplier;
 
 public final class CreativeTabs {
-    private CreativeTabs() {}
+    private CreativeTabs() {
+    }
     
     // I am sorry, fabric wants a resource location instead of the translation key for whatever reason
     @ExpectPlatform

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/CriteriaTriggersRegistry.java

@@ -23,7 +23,8 @@ import me.shedaniel.architectury.annotations.ExpectPlatform;
 import net.minecraft.advancements.CriterionTrigger;
 
 public final class CriteriaTriggersRegistry {
-    private CriteriaTriggersRegistry() {}
+    private CriteriaTriggersRegistry() {
+    }
     
     /**
      * Invokes {@link net.minecraft.advancements.CriteriaTriggers#register(CriterionTrigger)}.

+ 8 - 8
common/src/main/java/me/shedaniel/architectury/registry/DeferredRegister.java

@@ -96,27 +96,27 @@ public class DeferredRegister<T> {
         private final ResourceLocation id;
         private final Supplier<R> supplier;
         private RegistrySupplier<R> value;
-    
+        
         public Entry(ResourceLocation id, Supplier<R> supplier) {
             this.id = id;
             this.supplier = supplier;
         }
-    
+        
         @Override
         public ResourceLocation getRegistryId() {
             return key.location();
         }
-    
+        
         @Override
         public ResourceLocation getId() {
             return id;
         }
-    
+        
         @Override
         public boolean isPresent() {
             return value != null && value.isPresent();
         }
-    
+        
         @Override
         public R get() {
             if (isPresent()) {
@@ -124,12 +124,12 @@ public class DeferredRegister<T> {
             }
             throw new NullPointerException("Registry Object not present: " + this.id);
         }
-    
+        
         @Override
         public int hashCode() {
             return com.google.common.base.Objects.hashCode(getRegistryId(), getId());
         }
-    
+        
         @Override
         public boolean equals(Object obj) {
             if (this == obj) return true;
@@ -137,7 +137,7 @@ public class DeferredRegister<T> {
             RegistrySupplier<?> other = (RegistrySupplier<?>) obj;
             return other.getRegistryId().equals(getRegistryId()) && other.getId().equals(getId());
         }
-    
+        
         @Override
         public String toString() {
             return getRegistryId().toString() + "@" + id.toString();

+ 6 - 5
common/src/main/java/me/shedaniel/architectury/registry/GameRuleFactory.java

@@ -29,8 +29,9 @@ import java.util.function.BiConsumer;
  * A utility class for creating game rule types.
  */
 public final class GameRuleFactory {
-    private GameRuleFactory() {}
-
+    private GameRuleFactory() {
+    }
+    
     /**
      * Creates a boolean rule type.
      *
@@ -41,7 +42,7 @@ public final class GameRuleFactory {
     public static GameRules.Type<GameRules.BooleanValue> createBooleanRule(boolean defaultValue) {
         throw new AssertionError();
     }
-
+    
     /**
      * Creates a boolean rule type.
      *
@@ -53,7 +54,7 @@ public final class GameRuleFactory {
     public static GameRules.Type<GameRules.BooleanValue> createBooleanRule(boolean defaultValue, BiConsumer<MinecraftServer, GameRules.BooleanValue> changedCallback) {
         throw new AssertionError();
     }
-
+    
     /**
      * Creates an integer rule type.
      *
@@ -64,7 +65,7 @@ public final class GameRuleFactory {
     public static GameRules.Type<GameRules.IntegerValue> createIntRule(int defaultValue) {
         throw new AssertionError();
     }
-
+    
     /**
      * Creates an integer rule type.
      *

+ 4 - 3
common/src/main/java/me/shedaniel/architectury/registry/GameRuleRegistry.java

@@ -26,15 +26,16 @@ import net.minecraft.world.level.GameRules;
  * A registry for registering game rules.
  */
 public final class GameRuleRegistry {
-    private GameRuleRegistry() {}
-
+    private GameRuleRegistry() {
+    }
+    
     /**
      * Registers a game rule.
      *
      * @param name     the rule's name
      * @param category the rule category
      * @param type     the type of the rule
-     * @param <T> the type of the rule value
+     * @param <T>      the type of the rule value
      * @return a key for the registered rule
      */
     @ExpectPlatform

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/KeyBindings.java

@@ -26,7 +26,8 @@ import net.minecraft.client.KeyMapping;
 
 @Environment(EnvType.CLIENT)
 public final class KeyBindings {
-    private KeyBindings() {}
+    private KeyBindings() {
+    }
     
     @ExpectPlatform
     public static void registerKeyBinding(KeyMapping binding) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/MenuRegistry.java

@@ -41,7 +41,8 @@ import java.util.function.Consumer;
  * A utility class to register {@link MenuType}s and {@link Screen}s for containers
  */
 public final class MenuRegistry {
-    private MenuRegistry() {}
+    private MenuRegistry() {
+    }
     
     /**
      * Opens the menu.

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/ReloadListeners.java

@@ -24,7 +24,8 @@ import net.minecraft.server.packs.PackType;
 import net.minecraft.server.packs.resources.PreparableReloadListener;
 
 public final class ReloadListeners {
-    private ReloadListeners() {}
+    private ReloadListeners() {
+    }
     
     @ExpectPlatform
     public static void registerReloadListener(PackType type, PreparableReloadListener listener) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/RenderTypes.java

@@ -28,7 +28,8 @@ import net.minecraft.world.level.material.Fluid;
 
 @Environment(EnvType.CLIENT)
 public final class RenderTypes {
-    private RenderTypes() {}
+    private RenderTypes() {
+    }
     
     @ExpectPlatform
     public static void register(RenderType type, Block... blocks) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/entity/EntityAttributes.java

@@ -27,7 +27,8 @@ import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
 import java.util.function.Supplier;
 
 public final class EntityAttributes {
-    private EntityAttributes() {}
+    private EntityAttributes() {
+    }
     
     /**
      * Registers default attributes to entities.

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/entity/EntityRenderers.java

@@ -31,7 +31,8 @@ import java.util.function.Function;
 
 @Environment(EnvType.CLIENT)
 public final class EntityRenderers {
-    private EntityRenderers() {}
+    private EntityRenderers() {
+    }
     
     @ExpectPlatform
     public static <T extends Entity> void register(EntityType<T> type, Function<EntityRenderDispatcher, EntityRenderer<T>> factory) {

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java

@@ -24,7 +24,8 @@ import net.minecraft.world.item.ItemStack;
 import net.minecraft.world.level.ItemLike;
 
 public final class FuelRegistry {
-    private FuelRegistry() {}
+    private FuelRegistry() {
+    }
     
     /**
      * Registers a burn time for items.

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/registry/trade/TradeRegistry.java

@@ -24,7 +24,8 @@ import net.minecraft.world.entity.npc.VillagerProfession;
 import net.minecraft.world.entity.npc.VillagerTrades;
 
 public class TradeRegistry {
-    private TradeRegistry() {}
+    private TradeRegistry() {
+    }
     
     /**
      * Register a trade ({@link VillagerTrades.ItemListing}) for a villager by its profession and level.

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/utils/EnvExecutor.java

@@ -56,5 +56,6 @@ public final class EnvExecutor {
         }
     }
     
-    private EnvExecutor() {}
+    private EnvExecutor() {
+    }
 }

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/utils/NbtType.java

@@ -40,5 +40,6 @@ public final class NbtType {
      */
     public static final int NUMBER = 99;
     
-    private NbtType() {}
+    private NbtType() {
+    }
 }

+ 4 - 4
common/src/main/java/me/shedaniel/architectury/utils/PlatformExpectedError.java

@@ -22,19 +22,19 @@ package me.shedaniel.architectury.utils;
 public class PlatformExpectedError extends Error {
     public PlatformExpectedError() {
     }
-
+    
     public PlatformExpectedError(String message) {
         super(message);
     }
-
+    
     public PlatformExpectedError(String message, Throwable cause) {
         super(message, cause);
     }
-
+    
     public PlatformExpectedError(Throwable cause) {
         super(cause);
     }
-
+    
     public PlatformExpectedError(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
         super(message, cause, enableSuppression, writableStackTrace);
     }

+ 2 - 1
common/src/main/java/me/shedaniel/architectury/utils/Value.java

@@ -22,4 +22,5 @@ package me.shedaniel.architectury.utils;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 
-public interface Value<T> extends Supplier<T>, Consumer<T> {}
+public interface Value<T> extends Supplier<T>, Consumer<T> {
+}

+ 5 - 1
common/src/main/resources/architectury-common.mixins.json

@@ -5,7 +5,11 @@
   "minVersion": "0.7.11",
   "client": [
   ],
-  "mixins": ["BlockLandingInvoker", "FluidTagsAccessor", "MixinLightningBolt"],
+  "mixins": [
+    "BlockLandingInvoker",
+    "FluidTagsAccessor",
+    "MixinLightningBolt"
+  ],
   "injectors": {
     "maxShiftBy": 5,
     "defaultRequire": 1

+ 1 - 1
fabric/src/main/java/me/shedaniel/architectury/compat/fabric/ModMenuCompatibility.java

@@ -22,8 +22,8 @@ package me.shedaniel.architectury.compat.fabric;
 import com.google.common.collect.Maps;
 import io.github.prospector.modmenu.api.ConfigScreenFactory;
 import io.github.prospector.modmenu.api.ModMenuApi;
-import me.shedaniel.architectury.platform.fabric.PlatformImpl;
 import me.shedaniel.architectury.platform.Mod;
+import me.shedaniel.architectury.platform.fabric.PlatformImpl;
 
 import java.util.Map;
 

+ 0 - 1
fabric/src/main/java/me/shedaniel/architectury/hooks/fabric/BlockEntityHooksImpl.java

@@ -19,7 +19,6 @@
 
 package me.shedaniel.architectury.hooks.fabric;
 
-import com.google.common.base.Preconditions;
 import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable;
 import net.minecraft.server.level.ServerLevel;
 import net.minecraft.world.level.Level;

+ 2 - 2
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/ExplosionPreInvoker.java

@@ -35,10 +35,10 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
 
 @Mixin(value = {Level.class, ServerLevel.class})
 public class ExplosionPreInvoker {
-    @Inject(method = "explode(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/damagesource/DamageSource;Lnet/minecraft/world/level/ExplosionDamageCalculator;DDDFZLnet/minecraft/world/level/Explosion$BlockInteraction;)Lnet/minecraft/world/level/Explosion;", 
+    @Inject(method = "explode(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/damagesource/DamageSource;Lnet/minecraft/world/level/ExplosionDamageCalculator;DDDFZLnet/minecraft/world/level/Explosion$BlockInteraction;)Lnet/minecraft/world/level/Explosion;",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Explosion;explode()V"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
     private void explodePre(Entity entity, DamageSource damageSource, ExplosionDamageCalculator explosionDamageCalculator, double d, double e, double f, float g, boolean bl, Explosion.BlockInteraction blockInteraction, CallbackInfoReturnable<Explosion> cir, Explosion explosion) {
-        if (ExplosionEvent.PRE.invoker().explode((Level)(Object) this, explosion) == InteractionResult.FAIL) {
+        if (ExplosionEvent.PRE.invoker().explode((Level) (Object) this, explosion) == InteractionResult.FAIL) {
             cir.setReturnValue(explosion);
         }
     }

+ 1 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java

@@ -32,7 +32,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 public abstract class MixinBlockItem {
     @Inject(method = "place",
             at = @At(value = "INVOKE",
-                     target = "Lnet/minecraft/world/item/context/BlockPlaceContext;getClickedPos()Lnet/minecraft/core/BlockPos;"),
+                    target = "Lnet/minecraft/world/item/context/BlockPlaceContext;getClickedPos()Lnet/minecraft/core/BlockPos;"),
             cancellable = true)
     private void place(BlockPlaceContext context, CallbackInfoReturnable<InteractionResult> cir) {
         InteractionResult result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer());

+ 1 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinCommands.java

@@ -35,7 +35,7 @@ import org.spongepowered.asm.mixin.injection.Redirect;
 @Mixin(Commands.class)
 public class MixinCommands {
     @Redirect(method = "performCommand",
-              at = @At(value = "INVOKE", target = "Lcom/mojang/brigadier/CommandDispatcher;execute(Lcom/mojang/brigadier/StringReader;Ljava/lang/Object;)I", remap = false))
+            at = @At(value = "INVOKE", target = "Lcom/mojang/brigadier/CommandDispatcher;execute(Lcom/mojang/brigadier/StringReader;Ljava/lang/Object;)I", remap = false))
     private int performCommand(CommandDispatcher<CommandSourceStack> dispatcher, StringReader input, Object source) throws CommandSyntaxException {
         CommandSourceStack stack = (CommandSourceStack) source;
         ParseResults<CommandSourceStack> parse = dispatcher.parse(input, stack);

+ 22 - 7
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinExplosion.java

@@ -38,13 +38,28 @@ import java.util.Set;
 
 @Mixin(Explosion.class)
 public class MixinExplosion implements ExplosionHooksImpl.ExplosionExtensions {
-    @Shadow @Final private Level level;
-    @Shadow @Final private double x;
-    @Shadow @Final private double y;
-    @Shadow @Final private double z;
-    @Shadow @Final @Nullable private Entity source;
-    @Shadow @Final @Mutable private float radius;
-    @Unique Vec3 position;
+    @Shadow
+    @Final
+    private Level level;
+    @Shadow
+    @Final
+    private double x;
+    @Shadow
+    @Final
+    private double y;
+    @Shadow
+    @Final
+    private double z;
+    @Shadow
+    @Final
+    @Nullable
+    private Entity source;
+    @Shadow
+    @Final
+    @Mutable
+    private float radius;
+    @Unique
+    Vec3 position;
     
     @Inject(method = "explode", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;<init>(DDD)V", ordinal = 0),
             locals = LocalCapture.CAPTURE_FAILHARD)

+ 0 - 4
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFarmBlock.java

@@ -21,19 +21,15 @@ package me.shedaniel.architectury.mixin.fabric;
 
 import me.shedaniel.architectury.event.events.InteractionEvent;
 import net.minecraft.core.BlockPos;
-import net.minecraft.util.Tuple;
-import net.minecraft.world.InteractionResult;
 import net.minecraft.world.entity.Entity;
 import net.minecraft.world.level.Level;
 import net.minecraft.world.level.block.FarmBlock;
 import net.minecraft.world.level.block.state.BlockState;
 import org.apache.commons.lang3.tuple.Triple;
 import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
 import org.spongepowered.asm.mixin.Unique;
 import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.Redirect;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 @Mixin(FarmBlock.class)

+ 3 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinFurnaceResultSlot.java

@@ -32,7 +32,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 @Mixin(FurnaceResultSlot.class)
 public class MixinFurnaceResultSlot {
-    @Shadow @Final private Player player;
+    @Shadow
+    @Final
+    private Player player;
     
     @Inject(method = "checkTakeAchievements", at = @At("RETURN"))
     private void checkTakeAchievements(ItemStack itemStack, CallbackInfo ci) {

+ 3 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinLevelChunk.java

@@ -33,7 +33,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 @Mixin(LevelChunk.class)
 public class MixinLevelChunk {
-    @Shadow @Final private ChunkPos chunkPos;
+    @Shadow
+    @Final
+    private ChunkPos chunkPos;
     
     @Inject(
             method = "addEntity",

+ 2 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinNaturalSpawner.java

@@ -22,7 +22,8 @@ package me.shedaniel.architectury.mixin.fabric;
 import me.shedaniel.architectury.event.EventResult;
 import me.shedaniel.architectury.event.events.EntityEvent;
 import net.minecraft.server.level.ServerLevel;
-import net.minecraft.world.entity.*;
+import net.minecraft.world.entity.Mob;
+import net.minecraft.world.entity.MobSpawnType;
 import net.minecraft.world.level.LevelAccessor;
 import net.minecraft.world.level.NaturalSpawner;
 import org.spongepowered.asm.mixin.Mixin;

+ 2 - 2
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPhantomSpawner.java

@@ -53,8 +53,8 @@ public abstract class MixinPhantomSpawner {
             locals = LocalCapture.CAPTURE_FAILSOFT // SOFT, because this will break in 2 seconds
     )
     private void checkPhantomSpawn(ServerLevel level, boolean bl, boolean bl2, CallbackInfoReturnable<Integer> cir,
-            Random random, int i, Iterator<ServerPlayer> it, Player player, BlockPos pos, DifficultyInstance diff, BlockPos pos2,
-            SpawnGroupData sgd, int l, int m, Phantom entity) {
+                                   Random random, int i, Iterator<ServerPlayer> it, Player player, BlockPos pos, DifficultyInstance diff, BlockPos pos2,
+                                   SpawnGroupData sgd, int l, int m, Phantom entity) {
         if (EntityEvent.LIVING_CHECK_SPAWN.invoker().canSpawn(entity, level, pos.getX(), pos.getY(), pos.getZ(), MobSpawnType.NATURAL, null).value() == Boolean.FALSE) {
             cir.setReturnValue(0);
             cir.cancel();

+ 2 - 2
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayer.java

@@ -54,8 +54,8 @@ public class MixinPlayer {
     }
     
     @Inject(method = "interactOn", at = @At(value = "INVOKE",
-                                            target = "Lnet/minecraft/world/entity/player/Player;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;",
-                                            ordinal = 0),
+            target = "Lnet/minecraft/world/entity/player/Player;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;",
+            ordinal = 0),
             cancellable = true)
     private void entityInteract(Entity entity, InteractionHand interactionHand, CallbackInfoReturnable<InteractionResult> cir) {
         InteractionResult result = InteractionEvent.INTERACT_ENTITY.invoker().interact((Player) (Object) this, entity, interactionHand);

+ 3 - 2
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinPlayerAdvancements.java

@@ -31,11 +31,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 
 @Mixin(PlayerAdvancements.class)
 public class MixinPlayerAdvancements {
-    @Shadow private ServerPlayer player;
+    @Shadow
+    private ServerPlayer player;
     
     @Inject(method = "award",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/advancements/AdvancementRewards;grant(Lnet/minecraft/server/level/ServerPlayer;)V",
-                     shift = At.Shift.AFTER))
+                    shift = At.Shift.AFTER))
     private void award(Advancement advancement, String string, CallbackInfoReturnable<Boolean> cir) {
         PlayerEvent.PLAYER_ADVANCEMENT.invoker().award(player, advancement);
     }

+ 8 - 4
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinResultSlot.java

@@ -33,13 +33,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 @Mixin(ResultSlot.class)
 public class MixinResultSlot {
-    @Shadow @Final private Player player;
+    @Shadow
+    @Final
+    private Player player;
     
-    @Shadow @Final private CraftingContainer craftSlots;
+    @Shadow
+    @Final
+    private CraftingContainer craftSlots;
     
     @Inject(method = "checkTakeAchievements", at = @At(value = "INVOKE",
-                                                       target = "Lnet/minecraft/world/item/ItemStack;onCraftedBy(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;I)V",
-                                                       shift = At.Shift.AFTER))
+            target = "Lnet/minecraft/world/item/ItemStack;onCraftedBy(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;I)V",
+            shift = At.Shift.AFTER))
     private void craft(ItemStack itemStack, CallbackInfo ci) {
         PlayerEvent.CRAFT_ITEM.invoker().craft(player, itemStack, craftSlots);
     }

+ 8 - 6
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerGamePacketListenerImpl.java

@@ -23,13 +23,11 @@ import me.shedaniel.architectury.event.events.ChatEvent;
 import net.minecraft.network.chat.ChatType;
 import net.minecraft.network.chat.Component;
 import net.minecraft.network.chat.TranslatableComponent;
-import net.minecraft.network.protocol.game.ServerboundChatPacket;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.server.level.ServerPlayer;
 import net.minecraft.server.network.ServerGamePacketListenerImpl;
 import net.minecraft.world.InteractionResult;
 import net.minecraft.world.InteractionResultHolder;
-import org.apache.commons.lang3.StringUtils;
 import org.spongepowered.asm.mixin.Final;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
@@ -39,18 +37,22 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 @Mixin(ServerGamePacketListenerImpl.class)
 public abstract class MixinServerGamePacketListenerImpl {
-    @Shadow public ServerPlayer player;
+    @Shadow
+    public ServerPlayer player;
     
-    @Shadow @Final private MinecraftServer server;
+    @Shadow
+    @Final
+    private MinecraftServer server;
     
-    @Shadow private int chatSpamTickCount;
+    @Shadow
+    private int chatSpamTickCount;
     
     @Shadow
     public abstract void disconnect(Component component);
     
     @Inject(method = "handleChat(Ljava/lang/String;)V",
             at = @At(value = "INVOKE",
-                     target = "Lnet/minecraft/server/players/PlayerList;broadcastMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/ChatType;Ljava/util/UUID;)V"),
+                    target = "Lnet/minecraft/server/players/PlayerList;broadcastMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/ChatType;Ljava/util/UUID;)V"),
             cancellable = true)
     private void handleChat(String message, CallbackInfo ci) {
         Component component = new TranslatableComponent("chat.type.text", this.player.getDisplayName(), message);

+ 1 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerLevel.java

@@ -40,7 +40,7 @@ public class MixinServerLevel {
     }
     
     @Inject(method = "addEntity", at = @At(value = "INVOKE",
-                                           target = "Lnet/minecraft/server/level/ServerLevel;getChunk(IILnet/minecraft/world/level/chunk/ChunkStatus;Z)Lnet/minecraft/world/level/chunk/ChunkAccess;"),
+            target = "Lnet/minecraft/server/level/ServerLevel;getChunk(IILnet/minecraft/world/level/chunk/ChunkStatus;Z)Lnet/minecraft/world/level/chunk/ChunkAccess;"),
             cancellable = true)
     private void addEntity(Entity entity, CallbackInfoReturnable<Boolean> cir) {
         if (EntityEvent.ADD.invoker().add(entity, (ServerLevel) (Object) this) == InteractionResult.FAIL) {

+ 1 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayer.java

@@ -54,7 +54,7 @@ public class MixinServerPlayer {
     
     @Inject(method = "doCloseContainer",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/AbstractContainerMenu;removed(Lnet/minecraft/world/entity/player/Player;)V",
-                     shift = At.Shift.AFTER))
+                    shift = At.Shift.AFTER))
     private void doCloseContainer(CallbackInfo ci) {
         PlayerEvent.CLOSE_MENU.invoker().close((ServerPlayer) (Object) this, ((ServerPlayer) (Object) this).containerMenu);
     }

+ 6 - 4
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinServerPlayerGameMode.java

@@ -35,13 +35,15 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
 
 @Mixin(ServerPlayerGameMode.class)
 public class MixinServerPlayerGameMode {
-    @Shadow public ServerLevel level;
+    @Shadow
+    public ServerLevel level;
     
-    @Shadow public ServerPlayer player;
+    @Shadow
+    public ServerPlayer player;
     
     @Inject(method = "destroyBlock", at = @At(value = "INVOKE",
-                                              target = "Lnet/minecraft/world/level/block/state/BlockState;getBlock()Lnet/minecraft/world/level/block/Block;",
-                                              ordinal = 0),
+            target = "Lnet/minecraft/world/level/block/state/BlockState;getBlock()Lnet/minecraft/world/level/block/Block;",
+            ordinal = 0),
             locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true)
     private void onBreak(BlockPos blockPos, CallbackInfoReturnable<Boolean> cir, BlockState state) {
         if (BlockEvent.BREAK.invoker().breakBlock(this.level, blockPos, state, this.player, null) == InteractionResult.FAIL) {

+ 9 - 5
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinClientPacketListener.java

@@ -43,9 +43,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 @Mixin(ClientPacketListener.class)
 public class MixinClientPacketListener {
-    @Shadow private Minecraft minecraft;
-    @Shadow @Final private RecipeManager recipeManager;
-    @Unique private LocalPlayer tmpPlayer;
+    @Shadow
+    private Minecraft minecraft;
+    @Shadow
+    @Final
+    private RecipeManager recipeManager;
+    @Unique
+    private LocalPlayer tmpPlayer;
     
     @Inject(method = "handleLogin", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options;broadcastOptions()V"))
     private void handleLogin(ClientboundLoginPacket packet, CallbackInfo ci) {
@@ -58,14 +62,14 @@ public class MixinClientPacketListener {
     }
     
     @Inject(method = "handleRespawn", at = @At(value = "INVOKE",
-                                               target = "Lnet/minecraft/client/multiplayer/ClientLevel;addPlayer(ILnet/minecraft/client/player/AbstractClientPlayer;)V"))
+            target = "Lnet/minecraft/client/multiplayer/ClientLevel;addPlayer(ILnet/minecraft/client/player/AbstractClientPlayer;)V"))
     private void handleRespawn(ClientboundRespawnPacket packet, CallbackInfo ci) {
         ClientPlayerEvent.CLIENT_PLAYER_RESPAWN.invoker().respawn(tmpPlayer, minecraft.player);
         this.tmpPlayer = null;
     }
     
     @Inject(method = "handleChat", at = @At(value = "INVOKE",
-                                            target = "Lnet/minecraft/client/gui/Gui;handleChat(Lnet/minecraft/network/chat/ChatType;Lnet/minecraft/network/chat/Component;Ljava/util/UUID;)V"),
+            target = "Lnet/minecraft/client/gui/Gui;handleChat(Lnet/minecraft/network/chat/ChatType;Lnet/minecraft/network/chat/Component;Ljava/util/UUID;)V"),
             cancellable = true)
     private void handleChat(ClientboundChatPacket packet, CallbackInfo ci) {
         InteractionResultHolder<Component> process = ClientChatEvent.CLIENT_RECEIVED.invoker().process(packet.getType(), packet.getMessage(), packet.getSender());

+ 5 - 3
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinGameRenderer.java

@@ -34,11 +34,13 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
 
 @Mixin(GameRenderer.class)
 public abstract class MixinGameRenderer {
-    @Shadow @Final private Minecraft minecraft;
+    @Shadow
+    @Final
+    private Minecraft minecraft;
     
     @Inject(method = "render(FJZ)V",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V",
-                     ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true)
+                    ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION, cancellable = true)
     public void renderScreenPre(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, PoseStack matrices) {
         if (GuiEvent.RENDER_PRE.invoker().render(minecraft.screen, matrices, mouseX, mouseY, minecraft.getDeltaFrameTime()) == InteractionResult.FAIL) {
             ci.cancel();
@@ -47,7 +49,7 @@ public abstract class MixinGameRenderer {
     
     @Inject(method = "render(FJZ)V",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;render(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V",
-                     shift = At.Shift.AFTER, ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
+                    shift = At.Shift.AFTER, ordinal = 0), locals = LocalCapture.CAPTURE_FAILEXCEPTION)
     public void renderScreenPost(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, PoseStack matrices) {
         GuiEvent.RENDER_POST.invoker().render(minecraft.screen, matrices, mouseX, mouseY, minecraft.getDeltaFrameTime());
     }

+ 4 - 4
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinKeyboardHandler.java

@@ -78,8 +78,8 @@ public class MixinKeyboardHandler {
     }
     
     @Inject(method = "keyPress", at = @At(value = "INVOKE",
-                                          target = "Lnet/minecraft/client/gui/screens/Screen;wrapScreenError(Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V",
-                                          ordinal = 0), cancellable = true)
+            target = "Lnet/minecraft/client/gui/screens/Screen;wrapScreenError(Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V",
+            ordinal = 0), cancellable = true)
     public void onKey(long long_1, int int_1, int int_2, int int_3, int int_4, CallbackInfo info) {
         if (!info.isCancelled()) {
             if (int_3 != 1 && (int_3 != 2 || !this.sendRepeatsToGui)) {
@@ -97,8 +97,8 @@ public class MixinKeyboardHandler {
     }
     
     @Inject(method = "keyPress", at = @At(value = "INVOKE",
-                                          target = "Lnet/minecraft/client/gui/screens/Screen;wrapScreenError(Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V",
-                                          ordinal = 0, shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD,
+            target = "Lnet/minecraft/client/gui/screens/Screen;wrapScreenError(Ljava/lang/Runnable;Ljava/lang/String;Ljava/lang/String;)V",
+            ordinal = 0, shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD,
             cancellable = true)
     public void onKeyAfter(long long_1, int int_1, int int_2, int int_3, int int_4, CallbackInfo info, ContainerEventHandler containerEventHandler, boolean bls[]) {
         if (!info.isCancelled() && !bls[0]) {

+ 14 - 10
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMinecraft.java

@@ -43,9 +43,13 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
 @Unique
 @Mixin(Minecraft.class)
 public abstract class MixinMinecraft {
-    @Shadow @Nullable public LocalPlayer player;
+    @Shadow
+    @Nullable
+    public LocalPlayer player;
     
-    @Shadow @Nullable public HitResult hitResult;
+    @Shadow
+    @Nullable
+    public HitResult hitResult;
     
     @Shadow
     public abstract void setScreen(@Nullable Screen screen);
@@ -75,10 +79,10 @@ public abstract class MixinMinecraft {
     @ModifyVariable(
             method = "setScreen",
             at = @At(value = "FIELD",
-                     opcode = Opcodes.PUTFIELD,
-                     target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;",
-                     shift = At.Shift.BY,
-                     by = -1),
+                    opcode = Opcodes.PUTFIELD,
+                    target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;",
+                    shift = At.Shift.BY,
+                    by = -1),
             argsOnly = true
     )
     public Screen modifyScreen(Screen screen) {
@@ -102,10 +106,10 @@ public abstract class MixinMinecraft {
     @Inject(
             method = "setScreen",
             at = @At(value = "FIELD",
-                     opcode = Opcodes.PUTFIELD,
-                     target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;",
-                     shift = At.Shift.BY,
-                     by = -1),
+                    opcode = Opcodes.PUTFIELD,
+                    target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;",
+                    shift = At.Shift.BY,
+                    by = -1),
             cancellable = true
     )
     public void cancelSetScreen(@Nullable Screen screen, CallbackInfo ci) {

+ 5 - 5
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMouseHandler.java

@@ -52,7 +52,7 @@ public class MixinMouseHandler {
     
     @Inject(method = "onScroll",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;mouseScrolled(DDD)Z",
-                     ordinal = 0), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
+                    ordinal = 0), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
     public void onMouseScrolled(long handle, double xOffset, double yOffset, CallbackInfo info, double amount, double x, double y) {
         if (!info.isCancelled()) {
             InteractionResult result = ClientScreenInputEvent.MOUSE_SCROLLED_PRE.invoker().mouseScrolled(minecraft, minecraft.screen, x, y, amount);
@@ -63,7 +63,7 @@ public class MixinMouseHandler {
     
     @Inject(method = "onScroll",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;mouseScrolled(DDD)Z",
-                     ordinal = 0, shift = At.Shift.AFTER), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
+                    ordinal = 0, shift = At.Shift.AFTER), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
     public void onMouseScrolledPost(long handle, double xOffset, double yOffset, CallbackInfo info, double amount, double x, double y) {
         if (!info.isCancelled()) {
             InteractionResult result = ClientScreenInputEvent.MOUSE_SCROLLED_POST.invoker().mouseScrolled(minecraft, minecraft.screen, x, y, amount);
@@ -72,7 +72,7 @@ public class MixinMouseHandler {
     
     @Inject(method = "onScroll",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isSpectator()Z",
-                     ordinal = 0), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
+                    ordinal = 0), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD)
     public void onRawMouseScrolled(long handle, double xOffset, double yOffset, CallbackInfo info, double amount) {
         if (!info.isCancelled()) {
             InteractionResult result = ClientRawInputEvent.MOUSE_SCROLLED.invoker().mouseScrolled(minecraft, amount);
@@ -106,8 +106,8 @@ public class MixinMouseHandler {
     }
     
     @Inject(method = "onPress", at = @At(value = "FIELD",
-                                         target = "Lnet/minecraft/client/Minecraft;overlay:Lnet/minecraft/client/gui/screens/Overlay;",
-                                         ordinal = 0), cancellable = true)
+            target = "Lnet/minecraft/client/Minecraft;overlay:Lnet/minecraft/client/gui/screens/Overlay;",
+            ordinal = 0), cancellable = true)
     public void onRawMouseClicked(long handle, int button, int action, int mods, CallbackInfo info) {
         if (!info.isCancelled()) {
             InteractionResult result = ClientRawInputEvent.MOUSE_CLICKED_PRE.invoker().mouseClicked(minecraft, button, action, mods);

+ 1 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinMultiPlayerGameMode.java

@@ -34,7 +34,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
 public class MixinMultiPlayerGameMode {
     @Inject(method = "interact",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V",
-                     shift = At.Shift.AFTER),
+                    shift = At.Shift.AFTER),
             cancellable = true)
     private void entityInteract(Player player, Entity entity, InteractionHand interactionHand, CallbackInfoReturnable<InteractionResult> cir) {
         InteractionResult result = InteractionEvent.INTERACT_ENTITY.invoker().interact(player, entity, interactionHand);

+ 9 - 5
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinScreen.java

@@ -44,9 +44,13 @@ import java.util.List;
 
 @Mixin(Screen.class)
 public abstract class MixinScreen implements ScreenInputDelegate {
-    @Shadow @Final public List<AbstractWidget> buttons;
-    @Unique private static ThreadLocal<TooltipEventPositionContextImpl> tooltipPositionContext = ThreadLocal.withInitial(TooltipEventPositionContextImpl::new);
-    @Unique private static ThreadLocal<TooltipEventColorContextImpl> tooltipColorContext = ThreadLocal.withInitial(TooltipEventColorContextImpl::new);
+    @Shadow
+    @Final
+    public List<AbstractWidget> buttons;
+    @Unique
+    private static ThreadLocal<TooltipEventPositionContextImpl> tooltipPositionContext = ThreadLocal.withInitial(TooltipEventPositionContextImpl::new);
+    @Unique
+    private static ThreadLocal<TooltipEventColorContextImpl> tooltipColorContext = ThreadLocal.withInitial(TooltipEventColorContextImpl::new);
     
     @Shadow
     public abstract List<? extends GuiEventListener> children();
@@ -102,13 +106,13 @@ public abstract class MixinScreen implements ScreenInputDelegate {
     }
     
     @ModifyVariable(method = "renderTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;Ljava/util/List;II)V",
-                    at = @At(value = "HEAD"), ordinal = 0)
+            at = @At(value = "HEAD"), ordinal = 0)
     private int modifyTooltipX(int original) {
         return tooltipPositionContext.get().getTooltipX();
     }
     
     @ModifyVariable(method = "renderTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;Ljava/util/List;II)V",
-                    at = @At(value = "HEAD"), ordinal = 1)
+            at = @At(value = "HEAD"), ordinal = 1)
     private int modifyTooltipY(int original) {
         return tooltipPositionContext.get().getTooltipY();
     }

+ 1 - 1
fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/client/MixinTextureAtlas.java

@@ -38,7 +38,7 @@ import java.util.stream.Stream;
 public class MixinTextureAtlas {
     @Inject(method = "prepareToStitch",
             at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", ordinal = 0,
-                     shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD)
+                    shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD)
     private void preStitch(ResourceManager resourceManager, Stream<ResourceLocation> stream, ProfilerFiller profilerFiller, int i, CallbackInfoReturnable<TextureAtlas.Preparations> cir, Set<ResourceLocation> set) {
         TextureStitchEvent.PRE.invoker().stitch((TextureAtlas) (Object) this, set::add);
     }

+ 20 - 20
fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BiomeModificationsImpl.java

@@ -79,13 +79,13 @@ public class BiomeModificationsImpl {
     
     static {
         BiomeModification modification = net.fabricmc.fabric.api.biome.v1.BiomeModifications.create(FABRIC_MODIFICATION);
-        registerModification(modification,ModificationPhase.ADDITIONS, ADDITIONS);
-        registerModification(modification,ModificationPhase.POST_PROCESSING, POST_PROCESSING);
-        registerModification(modification,ModificationPhase.REMOVALS, REMOVALS);
-        registerModification(modification,ModificationPhase.REPLACEMENTS, REPLACEMENTS);
+        registerModification(modification, ModificationPhase.ADDITIONS, ADDITIONS);
+        registerModification(modification, ModificationPhase.POST_PROCESSING, POST_PROCESSING);
+        registerModification(modification, ModificationPhase.REMOVALS, REMOVALS);
+        registerModification(modification, ModificationPhase.REPLACEMENTS, REPLACEMENTS);
     }
     
-    private static void registerModification( BiomeModification modification, ModificationPhase phase, List<Pair<Predicate<BiomeContext>, BiConsumer<BiomeContext, BiomeProperties.Mutable>>> list ) {
+    private static void registerModification(BiomeModification modification, ModificationPhase phase, List<Pair<Predicate<BiomeContext>, BiConsumer<BiomeContext, BiomeProperties.Mutable>>> list) {
         modification.add(phase, Predicates.alwaysTrue(), (biomeSelectionContext, biomeModificationContext) -> {
             BiomeContext biomeContext = wrapSelectionContext(biomeSelectionContext);
             BiomeProperties.Mutable mutableBiome = wrapMutableBiome(biomeSelectionContext.getBiome(), biomeModificationContext);
@@ -153,43 +153,43 @@ public class BiomeModificationsImpl {
             super(biome);
             this.context = context;
         }
-    
+        
         @Override
         public Mutable setSurfaceBuilder(ConfiguredSurfaceBuilder<?> builder) {
             this.context.setBuiltInSurfaceBuilder(builder);
             return this;
         }
-    
+        
         @Override
         public Mutable addFeature(GenerationStep.Decoration decoration, ConfiguredFeature<?, ?> feature) {
             this.context.addBuiltInFeature(decoration, feature);
             return this;
         }
-    
+        
         @Override
         public Mutable addCarver(GenerationStep.Carving carving, ConfiguredWorldCarver<?> feature) {
             context.addBuiltInCarver(carving, feature);
             return this;
         }
-    
+        
         @Override
         public Mutable addStructure(ConfiguredStructureFeature<?, ?> feature) {
             context.addBuiltInStructure(feature);
             return this;
         }
-    
+        
         @Override
         public Mutable removeFeature(GenerationStep.Decoration decoration, ConfiguredFeature<?, ?> feature) {
             context.removeBuiltInFeature(decoration, feature);
             return this;
         }
-    
+        
         @Override
         public Mutable removeCarver(GenerationStep.Carving carving, ConfiguredWorldCarver<?> feature) {
             context.removeBuiltInCarver(carving, feature);
             return this;
         }
-    
+        
         @Override
         public Mutable removeStructure(ConfiguredStructureFeature<?, ?> feature) {
             context.removeBuiltInStructure(feature);
@@ -199,47 +199,47 @@ public class BiomeModificationsImpl {
     
     private static class MutableSpawnProperties extends BiomeHooks.SpawnSettingsWrapped implements SpawnProperties.Mutable {
         protected final SpawnSettingsContext context;
-    
+        
         public MutableSpawnProperties(Biome biome, SpawnSettingsContext context) {
             super(biome);
             this.context = context;
         }
-    
+        
         @Override
         public @NotNull Mutable setCreatureProbability(float probability) {
             context.setCreatureSpawnProbability(probability);
             return this;
         }
-    
+        
         @Override
         public Mutable addSpawn(MobCategory category, MobSpawnSettings.SpawnerData data) {
             context.addSpawn(category, data);
             return this;
         }
-    
+        
         @Override
         public boolean removeSpawns(BiPredicate<MobCategory, MobSpawnSettings.SpawnerData> predicate) {
             return context.removeSpawns(predicate);
         }
-    
+        
         @Override
         public Mutable setSpawnCost(EntityType<?> entityType, MobSpawnSettings.MobSpawnCost cost) {
             context.setSpawnCost(entityType, cost.getCharge(), cost.getEnergyBudget());
             return this;
         }
-    
+        
         @Override
         public Mutable setSpawnCost(EntityType<?> entityType, double mass, double gravityLimit) {
             context.setSpawnCost(entityType, mass, gravityLimit);
             return this;
         }
-    
+        
         @Override
         public Mutable clearSpawnCost(EntityType<?> entityType) {
             context.clearSpawnCost(entityType);
             return this;
         }
-    
+        
         @Override
         public @NotNull Mutable setPlayerSpawnFriendly(boolean friendly) {
             context.setPlayerSpawnFriendly(friendly);

+ 3 - 3
fabric/src/main/java/me/shedaniel/architectury/registry/fabric/GameRuleFactoryImpl.java

@@ -29,15 +29,15 @@ public class GameRuleFactoryImpl {
     public static GameRules.Type<GameRules.BooleanValue> createBooleanRule(boolean defaultValue) {
         return GameRuleFactory.createBooleanRule(defaultValue);
     }
-
+    
     public static GameRules.Type<GameRules.BooleanValue> createBooleanRule(boolean defaultValue, BiConsumer<MinecraftServer, GameRules.BooleanValue> changedCallback) {
         return GameRuleFactory.createBooleanRule(defaultValue, changedCallback);
     }
-
+    
     public static GameRules.Type<GameRules.IntegerValue> createIntRule(int defaultValue) {
         return GameRuleFactory.createIntRule(defaultValue);
     }
-
+    
     public static GameRules.Type<GameRules.IntegerValue> createIntRule(int defaultValue, BiConsumer<MinecraftServer, GameRules.IntegerValue> changedCallback) {
         return GameRuleFactory.createIntRule(defaultValue, changedCallback);
     }

+ 1 - 1
forge/build.gradle

@@ -71,7 +71,7 @@ publishing {
             }
         }
     }
-    
+
     repositories {
         if (System.getenv("MAVEN_PASS") != null) {
             maven {

+ 2 - 1
forge/src/main/java/me/shedaniel/architectury/hooks/forge/FluidStackHooksForge.java

@@ -23,7 +23,8 @@ import me.shedaniel.architectury.fluid.FluidStack;
 import me.shedaniel.architectury.utils.Fraction;
 
 public final class FluidStackHooksForge {
-    private FluidStackHooksForge() {}
+    private FluidStackHooksForge() {
+    }
     
     public static FluidStack fromForge(net.minecraftforge.fluids.FluidStack stack) {
         return FluidStack.create(stack.getFluid().delegate, Fraction.ofWhole(stack.getAmount()), stack.getTag());

+ 0 - 1
forge/src/main/java/me/shedaniel/architectury/networking/forge/NetworkManagerImpl.java

@@ -33,7 +33,6 @@ import net.minecraft.server.level.ServerPlayer;
 import net.minecraft.world.entity.player.Player;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
-import net.minecraftforge.common.MinecraftForge;
 import net.minecraftforge.event.entity.player.PlayerEvent;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.DistExecutor;

+ 2 - 1
forge/src/main/java/me/shedaniel/architectury/platform/forge/EventBuses.java

@@ -25,7 +25,8 @@ import java.util.*;
 import java.util.function.Consumer;
 
 public final class EventBuses {
-    private EventBuses() {}
+    private EventBuses() {
+    }
     
     private static final Map<String, IEventBus> EVENT_BUS_MAP = new HashMap<>();
     private static final Map<String, List<Consumer<IEventBus>>> ON_REGISTERED = new HashMap<>();

+ 0 - 1
forge/src/main/java/me/shedaniel/architectury/registry/entity/forge/EntityAttributesImpl.java

@@ -27,7 +27,6 @@ import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
 import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Supplier;

+ 6 - 2
forge/src/main/java/me/shedaniel/architectury/registry/forge/BiomeModificationsImpl.java

@@ -157,7 +157,9 @@ public class BiomeModificationsImpl {
     private static class GenerationSettingsBuilderWrapped implements GenerationProperties {
         protected final BiomeGenerationSettingsBuilder generation;
         
-        public GenerationSettingsBuilderWrapped(BiomeGenerationSettingsBuilder generation) {this.generation = generation;}
+        public GenerationSettingsBuilderWrapped(BiomeGenerationSettingsBuilder generation) {
+            this.generation = generation;
+        }
         
         @Override
         public @NotNull Optional<Supplier<ConfiguredSurfaceBuilder<?>>> getSurfaceBuilder() {
@@ -184,7 +186,9 @@ public class BiomeModificationsImpl {
     private static class SpawnSettingsBuilderWrapped implements SpawnProperties {
         protected final MobSpawnInfoBuilder builder;
         
-        public SpawnSettingsBuilderWrapped(MobSpawnInfoBuilder builder) {this.builder = builder;}
+        public SpawnSettingsBuilderWrapped(MobSpawnInfoBuilder builder) {
+            this.builder = builder;
+        }
         
         @Override
         public float getCreatureProbability() {

+ 2 - 1
forge/src/main/java/me/shedaniel/architectury/registry/forge/GameRuleFactoryImpl.java

@@ -26,7 +26,8 @@ import net.minecraft.world.level.GameRules;
 import java.util.function.BiConsumer;
 
 public class GameRuleFactoryImpl {
-    private GameRuleFactoryImpl() {}
+    private GameRuleFactoryImpl() {
+    }
     
     public static GameRules.Type<GameRules.BooleanValue> createBooleanRule(boolean defaultValue) {
         return GameRulesAccessor.BooleanValueSimple.invokeCreateArchitectury(defaultValue);

+ 1 - 1
forge/src/main/resources/META-INF/mods.toml

@@ -11,7 +11,7 @@ authors = "shedaniel"
 description = '''
 A intermediary api aimed to ease developing multiplatform mods.
 '''
-logoFile="icon.png"
+logoFile = "icon.png"
 license = "LGPL-3"
 
 [[dependencies.architectury]]

+ 11 - 3
forge/src/main/resources/architectury.mixins.json

@@ -7,9 +7,17 @@
   "client": [
   ],
   "mixins": [
-    "BiomeGenerationSettingsBuilderAccessor", "GameRulesAccessor", "GameRulesAccessor$BooleanValue", "GameRulesAccessor$BooleanValueSimple",
-    "GameRulesAccessor$IntegerValue", "GameRulesAccessor$IntegerValueSimple", "MixinBlockEntity", "MixinBlockEntityExtension", "MixinItemExtension",
-    "MixinRegistryEntry", "MobSpawnSettingsBuilderAccessor"
+    "BiomeGenerationSettingsBuilderAccessor",
+    "GameRulesAccessor",
+    "GameRulesAccessor$BooleanValue",
+    "GameRulesAccessor$BooleanValueSimple",
+    "GameRulesAccessor$IntegerValue",
+    "GameRulesAccessor$IntegerValueSimple",
+    "MixinBlockEntity",
+    "MixinBlockEntityExtension",
+    "MixinItemExtension",
+    "MixinRegistryEntry",
+    "MobSpawnSettingsBuilderAccessor"
   ],
   "injectors": {
     "defaultRequire": 1

+ 1 - 1
gradle.properties

@@ -6,7 +6,7 @@ supported_version=1.16.4/5
 
 archives_base_name=architectury
 archives_base_name_snapshot=architectury-snapshot
-base_version=1.13
+base_version=1.14
 maven_group=me.shedaniel
 
 fabric_loader_version=0.11.1

+ 0 - 1
testmod-common/src/main/java/me/shedaniel/architectury/test/events/DebugEvents.java

@@ -29,7 +29,6 @@ import me.shedaniel.architectury.platform.Platform;
 import me.shedaniel.architectury.utils.Env;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
-import net.minecraft.client.gui.screens.ChatScreen;
 import net.minecraft.client.gui.screens.inventory.AnvilScreen;
 import net.minecraft.core.Position;
 import net.minecraft.core.Vec3i;

+ 4 - 3
testmod-common/src/main/java/me/shedaniel/architectury/test/gamerule/TestGameRules.java

@@ -28,11 +28,12 @@ import static me.shedaniel.architectury.registry.GameRuleRegistry.register;
 
 public class TestGameRules {
     private static final Logger LOGGER = LogManager.getLogger();
-
+    
     public static final GameRules.Key<GameRules.BooleanValue> SIMPLE_BOOL = register("simpleBool", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(true));
     public static final GameRules.Key<GameRules.IntegerValue> SIMPLE_INT = register("simpleInt", GameRules.Category.MISC, GameRuleFactory.createIntRule(10));
     public static final GameRules.Key<GameRules.BooleanValue> CALLBACK_BOOL = register("callbackBool", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(true, (server, value) -> LOGGER.info("changed to {}", value.get())));
     public static final GameRules.Key<GameRules.IntegerValue> CALLBACK_INT = register("callbackInt", GameRules.Category.MISC, GameRuleFactory.createIntRule(10, (server, value) -> LOGGER.info("changed to {}", value.get())));
-
-    public static void init() {}
+    
+    public static void init() {
+    }
 }

+ 1 - 1
testmod-common/src/main/java/me/shedaniel/architectury/test/trade/TestTrades.java

@@ -19,8 +19,8 @@
 
 package me.shedaniel.architectury.test.trade;
 
-import me.shedaniel.architectury.registry.trade.TradeRegistry;
 import me.shedaniel.architectury.registry.trade.SimpleTrade;
+import me.shedaniel.architectury.registry.trade.TradeRegistry;
 import net.minecraft.core.Registry;
 import net.minecraft.world.entity.npc.VillagerProfession;
 import net.minecraft.world.entity.npc.VillagerTrades;

+ 4 - 4
testmod-common/src/main/resources/data/architectury-test/tags/blocks/heart_particles2.json

@@ -1,6 +1,6 @@
 {
-    "replace": false,
-    "values": [
-        "minecraft:emerald_block"
-    ]
+  "replace": false,
+  "values": [
+    "minecraft:emerald_block"
+  ]
 }

+ 1 - 1
testmod-forge/build.gradle

@@ -5,7 +5,7 @@ plugins {
 
 loom {
     mixinConfig "architectury.mixins.json"
-    
+
     localMods {
         it.add(project(":forge").sourceSets.main)
     }