Skip to content

Commit 9e68684

Browse files
committed
make IIngredientVisibility available earlier, in IJeiHelpers
1 parent 287dcd9 commit 9e68684

File tree

16 files changed

+136
-128
lines changed

16 files changed

+136
-128
lines changed

CommonApi/src/main/java/mezz/jei/api/helpers/IJeiHelpers.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import mezz.jei.api.recipe.RecipeType;
77
import mezz.jei.api.recipe.vanilla.IVanillaRecipeFactory;
88
import mezz.jei.api.runtime.IIngredientManager;
9+
import mezz.jei.api.runtime.IIngredientVisibility;
910
import net.minecraft.resources.ResourceLocation;
1011

1112
import java.util.Optional;
@@ -102,4 +103,12 @@ public interface IJeiHelpers {
102103
* @since 19.15.0
103104
*/
104105
IVanillaRecipeFactory getVanillaRecipeFactory();
106+
107+
/**
108+
* The {@link IIngredientVisibility} allows mod plugins to do advanced filtering of
109+
* ingredients based on what is visible in JEI.
110+
*
111+
* @since 19.18.4
112+
*/
113+
IIngredientVisibility getIngredientVisibility();
105114
}

CommonApi/src/main/java/mezz/jei/api/registration/IRecipeRegistration.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,12 @@ public interface IRecipeRegistration {
3434
* ingredients based on what is visible in JEI.
3535
*
3636
* @since 9.3.1
37+
* @deprecated use {@link IJeiHelpers#getIngredientVisibility()}
3738
*/
38-
IIngredientVisibility getIngredientVisibility();
39+
@Deprecated(since = "19.18.4", forRemoval = true)
40+
default IIngredientVisibility getIngredientVisibility() {
41+
return getJeiHelpers().getIngredientVisibility();
42+
}
3943

4044
/**
4145
* Add the recipes provided by your plugin.

CommonApi/src/main/java/mezz/jei/api/registration/IRuntimeRegistration.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,12 @@ public interface IRuntimeRegistration {
6868
/**
6969
* The {@link IIngredientVisibility} allows mod plugins to do advanced filtering of
7070
* ingredients based on what is visible in JEI.
71+
* @deprecated use {@link IJeiHelpers#getIngredientVisibility()}
7172
*/
72-
IIngredientVisibility getIngredientVisibility();
73+
@Deprecated(since = "19.18.4", forRemoval = true)
74+
default IIngredientVisibility getIngredientVisibility() {
75+
return getJeiHelpers().getIngredientVisibility();
76+
}
7377

7478
/**
7579
* Get a helper for all runtime Screen functions.

CommonApi/src/main/java/mezz/jei/api/runtime/IIngredientVisibility.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
package mezz.jei.api.runtime;
22

3-
import mezz.jei.api.IModPlugin;
3+
import mezz.jei.api.helpers.IJeiHelpers;
44
import mezz.jei.api.ingredients.IIngredientType;
55
import mezz.jei.api.ingredients.ITypedIngredient;
6-
import mezz.jei.api.registration.IRecipeRegistration;
6+
import org.jetbrains.annotations.ApiStatus;
77

88
/**
99
* The {@link IIngredientVisibility} allows mod plugins to do advanced filtering of
1010
* ingredients based on what is visible in JEI.
1111
*
12-
* An instance available during {@link IModPlugin#registerRecipes}
13-
* from {@link IRecipeRegistration#getIngredientVisibility()}
14-
* and it is accessible at runtime from
15-
* {@link IJeiRuntime#getIngredientVisibility()}.
12+
* An instance available from {@link IJeiHelpers#getIngredientVisibility()}.
1613
*
1714
* @since JEI 9.3.0
1815
*/
16+
@ApiStatus.NonExtendable
1917
public interface IIngredientVisibility {
2018
/**
2119
* Returns true if the given ingredient is visible in JEI's ingredient list.

CommonApi/src/main/java/mezz/jei/api/runtime/IJeiRuntime.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,12 @@ public interface IJeiRuntime {
5757
* ingredients based on what is visible in JEI.
5858
*
5959
* @since 9.3.0
60+
* @deprecated use {@link IJeiHelpers#getIngredientVisibility()}
6061
*/
61-
IIngredientVisibility getIngredientVisibility();
62+
@Deprecated(since = "19.18.4", forRemoval = true)
63+
default IIngredientVisibility getIngredientVisibility() {
64+
return getJeiHelpers().getIngredientVisibility();
65+
}
6266

6367
/**
6468
* The {@link IJeiKeyMappings} gives access to key mappings used by JEI.

Gui/src/main/java/mezz/jei/gui/startup/JeiGuiStarter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ public static JeiEventHandlers start(IRuntimeRegistration registration) {
7676
IScreenHelper screenHelper = registration.getScreenHelper();
7777
IRecipeTransferManager recipeTransferManager = registration.getRecipeTransferManager();
7878
IRecipeManager recipeManager = registration.getRecipeManager();
79-
IIngredientVisibility ingredientVisibility = registration.getIngredientVisibility();
8079
IIngredientManager ingredientManager = registration.getIngredientManager();
8180
IEditModeConfig editModeConfig = registration.getEditModeConfig();
8281

8382
IJeiHelpers jeiHelpers = registration.getJeiHelpers();
83+
IIngredientVisibility ingredientVisibility = jeiHelpers.getIngredientVisibility();
8484
IColorHelper colorHelper = jeiHelpers.getColorHelper();
8585
IModIdHelper modIdHelper = jeiHelpers.getModIdHelper();
8686
IFocusFactory focusFactory = jeiHelpers.getFocusFactory();

Library/src/main/java/mezz/jei/library/gui/ingredients/RecipeSlot.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private static List<Optional<ITypedIngredient<?>>> calculateDisplayIngredients(L
120120
// hide invisible ingredients if there are any
121121
// try scanning through all the ingredients without building the list of visible ingredients.
122122
// if an invisible ingredient is found, start building the list of visible ingredients
123-
IIngredientVisibility ingredientVisibility = Internal.getJeiRuntime().getIngredientVisibility();
123+
IIngredientVisibility ingredientVisibility = Internal.getJeiRuntime().getJeiHelpers().getIngredientVisibility();
124124
for (int i = 0; i < allIngredients.size() && visibleIngredients.size() < MAX_DISPLAYED_INGREDIENTS; i++) {
125125
Optional<ITypedIngredient<?>> ingredient = allIngredients.get(i);
126126
boolean visible = ingredient.isEmpty() || ingredientVisibility.isIngredientVisible(ingredient.get());

Library/src/main/java/mezz/jei/library/ingredients/IngredientVisibility.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public <V> boolean isIngredientVisible(ITypedIngredient<V> typedIngredient) {
4141
@Override
4242
public <V> boolean isIngredientVisible(IIngredientType<V> ingredientType, V ingredient) {
4343
IIngredientHelper<V> ingredientHelper = ingredientManager.getIngredientHelper(ingredientType);
44-
return TypedIngredient.createAndFilterInvalid(ingredientManager, ingredientType, ingredient, false)
44+
return TypedIngredient.createAndFilterInvalid(ingredientHelper, ingredientType, ingredient, false)
4545
.map(i -> isIngredientVisible(i, ingredientHelper))
4646
.orElse(false);
4747
}

Library/src/main/java/mezz/jei/library/load/PluginLoader.java

Lines changed: 67 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.google.common.collect.ImmutableListMultimap;
44
import com.google.common.collect.ImmutableSetMultimap;
5-
import com.google.common.collect.ImmutableTable;
65
import mezz.jei.api.IModPlugin;
76
import mezz.jei.api.helpers.IColorHelper;
87
import mezz.jei.api.helpers.IJeiHelpers;
@@ -13,23 +12,29 @@
1312
import mezz.jei.api.recipe.advanced.IRecipeManagerPlugin;
1413
import mezz.jei.api.recipe.category.IRecipeCategory;
1514
import mezz.jei.api.recipe.category.extensions.IRecipeCategoryDecorator;
16-
import mezz.jei.api.recipe.transfer.IRecipeTransferHandler;
1715
import mezz.jei.api.recipe.transfer.IRecipeTransferHandlerHelper;
16+
import mezz.jei.api.recipe.transfer.IRecipeTransferManager;
1817
import mezz.jei.api.runtime.IIngredientManager;
1918
import mezz.jei.api.runtime.IIngredientVisibility;
2019
import mezz.jei.api.runtime.IJeiFeatures;
2120
import mezz.jei.api.runtime.IScreenHelper;
2221
import mezz.jei.common.Internal;
22+
import mezz.jei.common.config.IClientToggleState;
2323
import mezz.jei.common.config.IIngredientFilterConfig;
24+
import mezz.jei.common.network.IConnectionToServer;
2425
import mezz.jei.common.platform.IPlatformFluidHelperInternal;
2526
import mezz.jei.common.platform.Services;
2627
import mezz.jei.common.util.StackHelper;
2728
import mezz.jei.core.util.LoggedTimer;
29+
import mezz.jei.library.config.EditModeConfig;
2830
import mezz.jei.library.config.IModIdFormatConfig;
2931
import mezz.jei.library.config.RecipeCategorySortingConfig;
3032
import mezz.jei.library.focus.FocusFactory;
3133
import mezz.jei.library.gui.helpers.GuiHelper;
34+
import mezz.jei.library.helpers.CodecHelper;
3235
import mezz.jei.library.helpers.ModIdHelper;
36+
import mezz.jei.library.ingredients.IngredientBlacklistInternal;
37+
import mezz.jei.library.ingredients.IngredientVisibility;
3338
import mezz.jei.library.ingredients.subtypes.SubtypeInterpreters;
3439
import mezz.jei.library.ingredients.subtypes.SubtypeManager;
3540
import mezz.jei.library.load.registration.AdvancedRegistration;
@@ -52,26 +57,14 @@
5257
import mezz.jei.library.runtime.JeiHelpers;
5358
import mezz.jei.library.startup.StartData;
5459
import mezz.jei.library.transfer.RecipeTransferHandlerHelper;
55-
import net.minecraft.world.inventory.AbstractContainerMenu;
5660
import org.jetbrains.annotations.Unmodifiable;
5761

5862
import java.util.List;
5963

60-
public class PluginLoader {
61-
private final StartData data;
62-
private final LoggedTimer timer;
63-
private final IIngredientManager ingredientManager;
64-
private final JeiHelpers jeiHelpers;
65-
66-
public PluginLoader(
67-
StartData data,
68-
IModIdFormatConfig modIdFormatConfig,
69-
IIngredientFilterConfig ingredientFilterConfig,
70-
IColorHelper colorHelper
71-
) {
72-
this.data = data;
73-
this.timer = new LoggedTimer();
64+
public final class PluginLoader {
65+
private PluginLoader() {}
7466

67+
public static SubtypeManager registerSubtypes(StartData data) {
7568
IPlatformFluidHelperInternal<?> fluidHelper = Services.PLATFORM.getFluidHelper();
7669
List<IModPlugin> plugins = data.plugins();
7770
SubtypeRegistration subtypeRegistration = new SubtypeRegistration();
@@ -80,38 +73,65 @@ public PluginLoader(
8073
p.registerFluidSubtypes(subtypeRegistration, fluidHelper)
8174
);
8275
SubtypeInterpreters subtypeInterpreters = subtypeRegistration.getInterpreters();
83-
SubtypeManager subtypeManager = new SubtypeManager(subtypeInterpreters);
76+
return new SubtypeManager(subtypeInterpreters);
77+
}
8478

79+
public static IIngredientManager registerIngredients(StartData data, SubtypeManager subtypeManager, IColorHelper colorHelper, IIngredientFilterConfig ingredientFilterConfig) {
80+
List<IModPlugin> plugins = data.plugins();
8581
IngredientManagerBuilder ingredientManagerBuilder = new IngredientManagerBuilder(subtypeManager, colorHelper);
8682
PluginCaller.callOnPlugins("Registering ingredients", plugins, p -> p.registerIngredients(ingredientManagerBuilder));
8783
PluginCaller.callOnPlugins("Registering extra ingredients", plugins, p -> p.registerExtraIngredients(ingredientManagerBuilder));
8884

8985
if (ingredientFilterConfig.getSearchIngredientAliases()) {
9086
PluginCaller.callOnPlugins("Registering search ingredient aliases", plugins, p -> p.registerIngredientAliases(ingredientManagerBuilder));
9187
}
88+
return ingredientManagerBuilder.build();
89+
}
9290

93-
this.ingredientManager = ingredientManagerBuilder.build();
94-
95-
ImmutableSetMultimap<String, String> modAliases;
96-
if (ingredientFilterConfig.getSearchModAliases()) {
97-
ModInfoRegistration modInfoRegistration = new ModInfoRegistration();
98-
PluginCaller.callOnPlugins("Registering Mod Info", plugins, p -> p.registerModInfo(modInfoRegistration));
99-
modAliases = modInfoRegistration.getModAliases();
100-
} else {
101-
modAliases = ImmutableSetMultimap.of();
91+
public static ImmutableSetMultimap<String, String> registerModAliases(
92+
StartData data,
93+
IIngredientFilterConfig ingredientFilterConfig
94+
) {
95+
List<IModPlugin> plugins = data.plugins();
96+
if (!ingredientFilterConfig.getSearchModAliases()) {
97+
return ImmutableSetMultimap.of();
10298
}
99+
ModInfoRegistration modInfoRegistration = new ModInfoRegistration();
100+
PluginCaller.callOnPlugins("Registering Mod Info", plugins, p -> p.registerModInfo(modInfoRegistration));
101+
return modInfoRegistration.getModAliases();
102+
}
103103

104+
public static JeiHelpers createJeiHelpers(
105+
ImmutableSetMultimap<String, String> modAliases,
106+
IModIdFormatConfig modIdFormatConfig,
107+
IColorHelper colorHelper,
108+
EditModeConfig editModeConfig,
109+
FocusFactory focusFactory,
110+
CodecHelper codecHelper,
111+
IIngredientManager ingredientManager,
112+
SubtypeManager subtypeManager
113+
) {
104114
VanillaRecipeFactory vanillaRecipeFactory = new VanillaRecipeFactory(ingredientManager);
105-
106115
StackHelper stackHelper = new StackHelper(subtypeManager);
107116
GuiHelper guiHelper = new GuiHelper(ingredientManager);
108-
FocusFactory focusFactory = new FocusFactory(ingredientManager);
109117
IModIdHelper modIdHelper = new ModIdHelper(modIdFormatConfig, ingredientManager, modAliases);
110-
this.jeiHelpers = new JeiHelpers(guiHelper, stackHelper, modIdHelper, focusFactory, colorHelper, ingredientManager, vanillaRecipeFactory);
118+
119+
IClientToggleState toggleState = Internal.getClientToggleState();
120+
IngredientBlacklistInternal blacklist = new IngredientBlacklistInternal();
121+
ingredientManager.registerIngredientListener(blacklist);
122+
123+
IIngredientVisibility ingredientVisibility = new IngredientVisibility(
124+
blacklist,
125+
toggleState,
126+
editModeConfig,
127+
ingredientManager
128+
);
129+
130+
return new JeiHelpers(guiHelper, stackHelper, modIdHelper, focusFactory, colorHelper, ingredientManager, vanillaRecipeFactory, codecHelper, ingredientVisibility);
111131
}
112132

113133
@Unmodifiable
114-
private List<IRecipeCategory<?>> createRecipeCategories(List<IModPlugin> plugins, VanillaPlugin vanillaPlugin) {
134+
private static List<IRecipeCategory<?>> createRecipeCategories(List<IModPlugin> plugins, VanillaPlugin vanillaPlugin, JeiHelpers jeiHelpers) {
115135
RecipeCategoryRegistration recipeCategoryRegistration = new RecipeCategoryRegistration(jeiHelpers);
116136
PluginCaller.callOnPlugins("Registering categories", plugins, p -> p.registerCategories(recipeCategoryRegistration));
117137
CraftingRecipeCategory craftingCategory = vanillaPlugin.getCraftingCategory()
@@ -123,41 +143,48 @@ private List<IRecipeCategory<?>> createRecipeCategories(List<IModPlugin> plugins
123143
return recipeCategoryRegistration.getRecipeCategories();
124144
}
125145

126-
public IScreenHelper createGuiScreenHelper(List<IModPlugin> plugins, IJeiHelpers jeiHelpers) {
146+
public static IScreenHelper createGuiScreenHelper(List<IModPlugin> plugins, IJeiHelpers jeiHelpers, IIngredientManager ingredientManager) {
127147
GuiHandlerRegistration guiHandlerRegistration = new GuiHandlerRegistration(jeiHelpers);
128148
PluginCaller.callOnPlugins("Registering gui handlers", plugins, p -> p.registerGuiHandlers(guiHandlerRegistration));
129149
return guiHandlerRegistration.createGuiScreenHelper(ingredientManager);
130150
}
131151

132-
public ImmutableTable<Class<? extends AbstractContainerMenu>, RecipeType<?>, IRecipeTransferHandler<?, ?>> createRecipeTransferHandlers(VanillaPlugin vanillaPlugin, List<IModPlugin> plugins) {
152+
public static IRecipeTransferManager createRecipeTransferManager(
153+
VanillaPlugin vanillaPlugin,
154+
List<IModPlugin> plugins,
155+
JeiHelpers jeiHelpers,
156+
IConnectionToServer connectionToServer
157+
) {
133158
IStackHelper stackHelper = jeiHelpers.getStackHelper();
134159
CraftingRecipeCategory craftingCategory = vanillaPlugin.getCraftingCategory()
135160
.orElseThrow(() -> new NullPointerException("vanilla crafting category"));
136161
IRecipeTransferHandlerHelper handlerHelper = new RecipeTransferHandlerHelper(stackHelper, craftingCategory);
137-
RecipeTransferRegistration recipeTransferRegistration = new RecipeTransferRegistration(stackHelper, handlerHelper, this.jeiHelpers, data.serverConnection());
162+
RecipeTransferRegistration recipeTransferRegistration = new RecipeTransferRegistration(stackHelper, handlerHelper, jeiHelpers, connectionToServer);
138163
PluginCaller.callOnPlugins("Registering recipes transfer handlers", plugins, p -> p.registerRecipeTransferHandlers(recipeTransferRegistration));
139-
return recipeTransferRegistration.getRecipeTransferHandlers();
164+
return recipeTransferRegistration.createRecipeTransferManager();
140165
}
141166

142-
public RecipeManager createRecipeManager(
167+
public static RecipeManager createRecipeManager(
143168
List<IModPlugin> plugins,
144169
VanillaPlugin vanillaPlugin,
145170
RecipeCategorySortingConfig recipeCategorySortingConfig,
146-
IIngredientVisibility ingredientVisibility
171+
JeiHelpers jeiHelpers,
172+
IIngredientManager ingredientManager
147173
) {
148-
List<IRecipeCategory<?>> recipeCategories = createRecipeCategories(plugins, vanillaPlugin);
174+
List<IRecipeCategory<?>> recipeCategories = createRecipeCategories(plugins, vanillaPlugin, jeiHelpers);
149175

150176
RecipeCatalystRegistration recipeCatalystRegistration = new RecipeCatalystRegistration(ingredientManager, jeiHelpers);
151177
PluginCaller.callOnPlugins("Registering recipe catalysts", plugins, p -> p.registerRecipeCatalysts(recipeCatalystRegistration));
152178
ImmutableListMultimap<RecipeType<?>, ITypedIngredient<?>> recipeCatalysts = recipeCatalystRegistration.getRecipeCatalysts();
153179

180+
LoggedTimer timer = new LoggedTimer();
154181
timer.start("Building recipe registry");
155182
RecipeManagerInternal recipeManagerInternal = new RecipeManagerInternal(
156183
recipeCategories,
157184
recipeCatalysts,
158185
ingredientManager,
159186
recipeCategorySortingConfig,
160-
ingredientVisibility
187+
jeiHelpers.getIngredientVisibility()
161188
);
162189
timer.stop();
163190

@@ -171,19 +198,11 @@ public RecipeManager createRecipeManager(
171198
recipeManagerInternal.addPlugins(recipeManagerPlugins);
172199
recipeManagerInternal.addDecorators(recipeCategoryDecorators);
173200

174-
RecipeRegistration recipeRegistration = new RecipeRegistration(jeiHelpers, ingredientManager, ingredientVisibility, recipeManagerInternal);
201+
RecipeRegistration recipeRegistration = new RecipeRegistration(jeiHelpers, ingredientManager, recipeManagerInternal);
175202
PluginCaller.callOnPlugins("Registering recipes", plugins, p -> p.registerRecipes(recipeRegistration));
176203

177204
recipeManagerInternal.compact();
178205

179206
return new RecipeManager(recipeManagerInternal, ingredientManager);
180207
}
181-
182-
public IIngredientManager getIngredientManager() {
183-
return ingredientManager;
184-
}
185-
186-
public JeiHelpers getJeiHelpers() {
187-
return jeiHelpers;
188-
}
189208
}

Library/src/main/java/mezz/jei/library/load/registration/RecipeRegistration.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import mezz.jei.api.recipe.vanilla.IVanillaRecipeFactory;
99
import mezz.jei.api.registration.IRecipeRegistration;
1010
import mezz.jei.api.runtime.IIngredientManager;
11-
import mezz.jei.api.runtime.IIngredientVisibility;
1211
import mezz.jei.common.util.ErrorUtil;
1312
import mezz.jei.library.plugins.jei.info.IngredientInfoRecipe;
1413
import mezz.jei.library.recipes.RecipeManagerInternal;
@@ -19,18 +18,15 @@
1918
public class RecipeRegistration implements IRecipeRegistration {
2019
private final IJeiHelpers jeiHelpers;
2120
private final IIngredientManager ingredientManager;
22-
private final IIngredientVisibility ingredientVisibility;
2321
private final RecipeManagerInternal recipeManager;
2422

2523
public RecipeRegistration(
2624
IJeiHelpers jeiHelpers,
2725
IIngredientManager ingredientManager,
28-
IIngredientVisibility ingredientVisibility,
2926
RecipeManagerInternal recipeManager
3027
) {
3128
this.jeiHelpers = jeiHelpers;
3229
this.ingredientManager = ingredientManager;
33-
this.ingredientVisibility = ingredientVisibility;
3430
this.recipeManager = recipeManager;
3531
}
3632

@@ -49,11 +45,6 @@ public IVanillaRecipeFactory getVanillaRecipeFactory() {
4945
return jeiHelpers.getVanillaRecipeFactory();
5046
}
5147

52-
@Override
53-
public IIngredientVisibility getIngredientVisibility() {
54-
return ingredientVisibility;
55-
}
56-
5748
@Override
5849
public <T> void addRecipes(RecipeType<T> recipeType, List<T> recipes) {
5950
ErrorUtil.checkNotNull(recipeType, "recipeType");

0 commit comments

Comments
 (0)