From 593848cece1ce5b109685b90dc84ad2a82fc4a9b Mon Sep 17 00:00:00 2001 From: mezz Date: Sun, 28 Jan 2024 12:58:49 -0800 Subject: [PATCH] Close #3168 Implement IJeiFeatures to let mods disable the InventoryEffectRendererGuiHandler --- .../main/java/mezz/jei/common/Internal.java | 5 ++++ .../java/mezz/jei/common/JeiFeatures.java | 16 +++++++++++++ .../registration/IAdvancedRegistration.java | 9 ++++++++ .../mezz/jei/api/runtime/IJeiFeatures.java | 23 +++++++++++++++++++ .../mezz/jei/library/load/PluginLoader.java | 6 +++-- .../registration/AdvancedRegistration.java | 10 +++++++- .../InventoryEffectRendererGuiHandler.java | 4 ++++ gradle.properties | 2 +- 8 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 Common/src/main/java/mezz/jei/common/JeiFeatures.java create mode 100644 CommonApi/src/main/java/mezz/jei/api/runtime/IJeiFeatures.java diff --git a/Common/src/main/java/mezz/jei/common/Internal.java b/Common/src/main/java/mezz/jei/common/Internal.java index 84b5461e0..81392adfd 100644 --- a/Common/src/main/java/mezz/jei/common/Internal.java +++ b/Common/src/main/java/mezz/jei/common/Internal.java @@ -26,6 +26,7 @@ public final class Internal { private static IClientToggleState toggleState; @Nullable private static IJeiClientConfigs jeiClientConfigs; + private static final JeiFeatures jeiFeatures = new JeiFeatures(); private Internal() { @@ -74,4 +75,8 @@ public static IJeiClientConfigs getJeiClientConfigs() { public static void setJeiClientConfigs(IJeiClientConfigs jeiClientConfigs) { Internal.jeiClientConfigs = jeiClientConfigs; } + + public static JeiFeatures getJeiFeatures() { + return jeiFeatures; + } } diff --git a/Common/src/main/java/mezz/jei/common/JeiFeatures.java b/Common/src/main/java/mezz/jei/common/JeiFeatures.java new file mode 100644 index 000000000..622eacfdc --- /dev/null +++ b/Common/src/main/java/mezz/jei/common/JeiFeatures.java @@ -0,0 +1,16 @@ +package mezz.jei.common; + +import mezz.jei.api.runtime.IJeiFeatures; + +public class JeiFeatures implements IJeiFeatures { + private boolean inventoryEffectRendererGuiHandlerEnabled = true; + + @Override + public void disableInventoryEffectRendererGuiHandler() { + inventoryEffectRendererGuiHandlerEnabled = false; + } + + public boolean getInventoryEffectRendererGuiHandlerEnabled() { + return inventoryEffectRendererGuiHandlerEnabled; + } +} diff --git a/CommonApi/src/main/java/mezz/jei/api/registration/IAdvancedRegistration.java b/CommonApi/src/main/java/mezz/jei/api/registration/IAdvancedRegistration.java index c342b24d2..dbb96f9d8 100644 --- a/CommonApi/src/main/java/mezz/jei/api/registration/IAdvancedRegistration.java +++ b/CommonApi/src/main/java/mezz/jei/api/registration/IAdvancedRegistration.java @@ -5,6 +5,7 @@ import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.advanced.IRecipeManagerPlugin; import mezz.jei.api.recipe.category.extensions.IRecipeCategoryDecorator; +import mezz.jei.api.runtime.IJeiFeatures; /** * The IAdvancedRegistration instance is passed to your mod plugin in {@link IModPlugin#registerAdvanced(IAdvancedRegistration)}. @@ -26,4 +27,12 @@ public interface IAdvancedRegistration { * @since 15.1.0 */ void addRecipeCategoryDecorator(RecipeType recipeType, IRecipeCategoryDecorator decorator); + + /** + * Get access to disable various JEI features. + * This may be needed by mods that substantially change hard-coded vanilla behaviors. + * + * @since 17.3.0 + */ + IJeiFeatures getJeiFeatures(); } diff --git a/CommonApi/src/main/java/mezz/jei/api/runtime/IJeiFeatures.java b/CommonApi/src/main/java/mezz/jei/api/runtime/IJeiFeatures.java new file mode 100644 index 000000000..6d172601a --- /dev/null +++ b/CommonApi/src/main/java/mezz/jei/api/runtime/IJeiFeatures.java @@ -0,0 +1,23 @@ +package mezz.jei.api.runtime; + +import mezz.jei.api.gui.handlers.IGuiContainerHandler; +import mezz.jei.api.registration.IAdvancedRegistration; + +/** + * Provides access for mod plugins to disable various JEI features. + * This may be needed by mods that substantially change hard-coded vanilla behaviors. + * + * Get an instance from {@link IAdvancedRegistration#getJeiFeatures()} + * + * @since 17.3.0 + */ +public interface IJeiFeatures { + /** + * Disable JEI's Inventory Effect Renderer {@link IGuiContainerHandler}. + * This is used by JEI in order to move out of the way of potion effects shown next to the inventory. + * It can be disabled by mods that remove this behavior or substitute their own. + * + * @since 17.3.0 + */ + void disableInventoryEffectRendererGuiHandler(); +} diff --git a/Library/src/main/java/mezz/jei/library/load/PluginLoader.java b/Library/src/main/java/mezz/jei/library/load/PluginLoader.java index 54e79f037..1b6f4c824 100644 --- a/Library/src/main/java/mezz/jei/library/load/PluginLoader.java +++ b/Library/src/main/java/mezz/jei/library/load/PluginLoader.java @@ -17,13 +17,14 @@ import mezz.jei.api.recipe.transfer.IRecipeTransferHandlerHelper; import mezz.jei.api.runtime.IIngredientManager; import mezz.jei.api.runtime.IIngredientVisibility; +import mezz.jei.api.runtime.IJeiFeatures; import mezz.jei.api.runtime.IScreenHelper; import mezz.jei.common.Internal; import mezz.jei.common.gui.textures.Textures; import mezz.jei.common.platform.IPlatformFluidHelperInternal; import mezz.jei.common.platform.Services; -import mezz.jei.core.util.LoggedTimer; import mezz.jei.common.util.StackHelper; +import mezz.jei.core.util.LoggedTimer; import mezz.jei.library.config.IModIdFormatConfig; import mezz.jei.library.config.RecipeCategorySortingConfig; import mezz.jei.library.focus.FocusFactory; @@ -128,7 +129,8 @@ public RecipeManager createRecipeManager( PluginCaller.callOnPlugins("Registering recipe catalysts", plugins, p -> p.registerRecipeCatalysts(recipeCatalystRegistration)); ImmutableListMultimap> recipeCatalysts = recipeCatalystRegistration.getRecipeCatalysts(); - AdvancedRegistration advancedRegistration = new AdvancedRegistration(jeiHelpers); + IJeiFeatures jeiFeatures = Internal.getJeiFeatures(); + AdvancedRegistration advancedRegistration = new AdvancedRegistration(jeiHelpers, jeiFeatures); PluginCaller.callOnPlugins("Registering advanced plugins", plugins, p -> p.registerAdvanced(advancedRegistration)); List recipeManagerPlugins = advancedRegistration.getRecipeManagerPlugins(); ImmutableListMultimap, IRecipeCategoryDecorator> recipeCategoryExtensions = advancedRegistration.getRecipeCategoryDecorators(); diff --git a/Library/src/main/java/mezz/jei/library/load/registration/AdvancedRegistration.java b/Library/src/main/java/mezz/jei/library/load/registration/AdvancedRegistration.java index 223b88022..735c309f7 100644 --- a/Library/src/main/java/mezz/jei/library/load/registration/AdvancedRegistration.java +++ b/Library/src/main/java/mezz/jei/library/load/registration/AdvancedRegistration.java @@ -6,6 +6,7 @@ import mezz.jei.api.recipe.advanced.IRecipeManagerPlugin; import mezz.jei.api.recipe.category.extensions.IRecipeCategoryDecorator; import mezz.jei.api.registration.IAdvancedRegistration; +import mezz.jei.api.runtime.IJeiFeatures; import mezz.jei.common.util.ErrorUtil; import mezz.jei.core.collect.ListMultiMap; import org.apache.logging.log4j.LogManager; @@ -21,9 +22,11 @@ public class AdvancedRegistration implements IAdvancedRegistration { private final List recipeManagerPlugins = new ArrayList<>(); private final ListMultiMap, IRecipeCategoryDecorator> recipeCategoryDecorators = new ListMultiMap<>(); private final IJeiHelpers jeiHelpers; + private final IJeiFeatures jeiFeatures; - public AdvancedRegistration(IJeiHelpers jeiHelpers) { + public AdvancedRegistration(IJeiHelpers jeiHelpers, IJeiFeatures jeiFeatures) { this.jeiHelpers = jeiHelpers; + this.jeiFeatures = jeiFeatures; } @Override @@ -48,6 +51,11 @@ public IJeiHelpers getJeiHelpers() { return jeiHelpers; } + @Override + public IJeiFeatures getJeiFeatures() { + return jeiFeatures; + } + @Unmodifiable public List getRecipeManagerPlugins() { return List.copyOf(recipeManagerPlugins); diff --git a/Library/src/main/java/mezz/jei/library/plugins/vanilla/InventoryEffectRendererGuiHandler.java b/Library/src/main/java/mezz/jei/library/plugins/vanilla/InventoryEffectRendererGuiHandler.java index 03b54b0fb..ee3598742 100644 --- a/Library/src/main/java/mezz/jei/library/plugins/vanilla/InventoryEffectRendererGuiHandler.java +++ b/Library/src/main/java/mezz/jei/library/plugins/vanilla/InventoryEffectRendererGuiHandler.java @@ -1,6 +1,7 @@ package mezz.jei.library.plugins.vanilla; import mezz.jei.api.gui.handlers.IGuiContainerHandler; +import mezz.jei.common.Internal; import mezz.jei.common.platform.IPlatformRenderHelper; import mezz.jei.common.platform.IPlatformScreenHelper; import mezz.jei.common.platform.Services; @@ -23,6 +24,9 @@ public final class InventoryEffectRendererGuiHandler getGuiExtraAreas(EffectRenderingInventoryScreen containerScreen) { + if (!Internal.getJeiFeatures().getInventoryEffectRendererGuiHandlerEnabled()) { + return List.of(); + } Minecraft minecraft = Minecraft.getInstance(); LocalPlayer player = minecraft.player; if (player == null) { diff --git a/gradle.properties b/gradle.properties index a30db8327..9f332d032 100644 --- a/gradle.properties +++ b/gradle.properties @@ -45,7 +45,7 @@ curseHomepageUrl=https://www.curseforge.com/minecraft/mc-mods/jei jUnitVersion=5.8.2 # Version -specificationVersion=17.2.0 +specificationVersion=17.3.0 # Workaround for Spotless bug # https://github.com/diffplug/spotless/issues/834