Skip to content

Commit eaa7b06

Browse files
committed
make IIngredientVisibility available earlier, in IJeiHelpers
1 parent 17b6a43 commit eaa7b06

File tree

16 files changed

+133
-123
lines changed

16 files changed

+133
-123
lines changed

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import mezz.jei.api.IModPlugin;
44
import mezz.jei.api.recipe.IFocusFactory;
55
import mezz.jei.api.recipe.RecipeType;
6+
import mezz.jei.api.recipe.vanilla.IVanillaRecipeFactory;
67
import mezz.jei.api.runtime.IIngredientManager;
8+
import mezz.jei.api.runtime.IIngredientVisibility;
79
import net.minecraft.resources.ResourceLocation;
810

911
import java.util.Optional;
@@ -88,4 +90,19 @@ public interface IJeiHelpers {
8890
* @since 11.5.0
8991
*/
9092
IIngredientManager getIngredientManager();
93+
94+
/**
95+
* The {@link IVanillaRecipeFactory} allows creation of vanilla recipes.
96+
*
97+
* @since 15.19.1
98+
*/
99+
IVanillaRecipeFactory getVanillaRecipeFactory();
100+
101+
/**
102+
* The {@link IIngredientVisibility} allows mod plugins to do advanced filtering of
103+
* ingredients based on what is visible in JEI.
104+
*
105+
* @since 15.19.1
106+
*/
107+
IIngredientVisibility getIngredientVisibility();
91108
}

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

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

3943
/**
4044
* 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 = "15.19.1", 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 = "15.19.1", 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
@@ -75,11 +75,11 @@ public static JeiEventHandlers start(IRuntimeRegistration registration) {
7575
IScreenHelper screenHelper = registration.getScreenHelper();
7676
IRecipeTransferManager recipeTransferManager = registration.getRecipeTransferManager();
7777
IRecipeManager recipeManager = registration.getRecipeManager();
78-
IIngredientVisibility ingredientVisibility = registration.getIngredientVisibility();
7978
IIngredientManager ingredientManager = registration.getIngredientManager();
8079
IEditModeConfig editModeConfig = registration.getEditModeConfig();
8180

8281
IJeiHelpers jeiHelpers = registration.getJeiHelpers();
82+
IIngredientVisibility ingredientVisibility = jeiHelpers.getIngredientVisibility();
8383
IColorHelper colorHelper = jeiHelpers.getColorHelper();
8484
IModIdHelper modIdHelper = jeiHelpers.getModIdHelper();
8585
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
}
Lines changed: 54 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package mezz.jei.library.load;
22

33
import com.google.common.collect.ImmutableListMultimap;
4-
import com.google.common.collect.ImmutableTable;
54
import mezz.jei.api.IModPlugin;
65
import mezz.jei.api.helpers.IColorHelper;
76
import mezz.jei.api.helpers.IJeiHelpers;
@@ -12,23 +11,28 @@
1211
import mezz.jei.api.recipe.advanced.IRecipeManagerPlugin;
1312
import mezz.jei.api.recipe.category.IRecipeCategory;
1413
import mezz.jei.api.recipe.category.extensions.IRecipeCategoryDecorator;
15-
import mezz.jei.api.recipe.transfer.IRecipeTransferHandler;
1614
import mezz.jei.api.recipe.transfer.IRecipeTransferHandlerHelper;
15+
import mezz.jei.api.recipe.transfer.IRecipeTransferManager;
1716
import mezz.jei.api.runtime.IIngredientManager;
1817
import mezz.jei.api.runtime.IIngredientVisibility;
1918
import mezz.jei.api.runtime.IJeiFeatures;
2019
import mezz.jei.api.runtime.IScreenHelper;
2120
import mezz.jei.common.Internal;
21+
import mezz.jei.common.config.IClientToggleState;
2222
import mezz.jei.common.config.IIngredientFilterConfig;
23+
import mezz.jei.common.network.IConnectionToServer;
2324
import mezz.jei.common.platform.IPlatformFluidHelperInternal;
2425
import mezz.jei.common.platform.Services;
2526
import mezz.jei.common.util.StackHelper;
2627
import mezz.jei.core.util.LoggedTimer;
28+
import mezz.jei.library.config.EditModeConfig;
2729
import mezz.jei.library.config.IModIdFormatConfig;
2830
import mezz.jei.library.config.RecipeCategorySortingConfig;
2931
import mezz.jei.library.focus.FocusFactory;
3032
import mezz.jei.library.gui.helpers.GuiHelper;
3133
import mezz.jei.library.helpers.ModIdHelper;
34+
import mezz.jei.library.ingredients.IngredientBlacklistInternal;
35+
import mezz.jei.library.ingredients.IngredientVisibility;
3236
import mezz.jei.library.ingredients.subtypes.SubtypeInterpreters;
3337
import mezz.jei.library.ingredients.subtypes.SubtypeManager;
3438
import mezz.jei.library.load.registration.AdvancedRegistration;
@@ -50,26 +54,14 @@
5054
import mezz.jei.library.runtime.JeiHelpers;
5155
import mezz.jei.library.startup.StartData;
5256
import mezz.jei.library.transfer.RecipeTransferHandlerHelper;
53-
import net.minecraft.world.inventory.AbstractContainerMenu;
5457
import org.jetbrains.annotations.Unmodifiable;
5558

5659
import java.util.List;
5760

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

64+
public static SubtypeManager registerSubtypes(StartData data) {
7365
IPlatformFluidHelperInternal<?> fluidHelper = Services.PLATFORM.getFluidHelper();
7466
List<IModPlugin> plugins = data.plugins();
7567
SubtypeRegistration subtypeRegistration = new SubtypeRegistration();
@@ -78,27 +70,51 @@ public PluginLoader(
7870
p.registerFluidSubtypes(subtypeRegistration, fluidHelper)
7971
);
8072
SubtypeInterpreters subtypeInterpreters = subtypeRegistration.getInterpreters();
81-
SubtypeManager subtypeManager = new SubtypeManager(subtypeInterpreters);
73+
return new SubtypeManager(subtypeInterpreters);
74+
}
8275

76+
public static IIngredientManager registerIngredients(StartData data, SubtypeManager subtypeManager, IColorHelper colorHelper, IIngredientFilterConfig ingredientFilterConfig) {
77+
List<IModPlugin> plugins = data.plugins();
8378
IngredientManagerBuilder ingredientManagerBuilder = new IngredientManagerBuilder(subtypeManager, colorHelper);
8479
PluginCaller.callOnPlugins("Registering ingredients", plugins, p -> p.registerIngredients(ingredientManagerBuilder));
8580
PluginCaller.callOnPlugins("Registering extra ingredients", plugins, p -> p.registerExtraIngredients(ingredientManagerBuilder));
8681

8782
if (ingredientFilterConfig.getSearchIngredientAliases()) {
8883
PluginCaller.callOnPlugins("Registering search ingredient aliases", plugins, p -> p.registerIngredientAliases(ingredientManagerBuilder));
8984
}
85+
return ingredientManagerBuilder.build();
86+
}
9087

91-
this.ingredientManager = ingredientManagerBuilder.build();
92-
88+
public static JeiHelpers createJeiHelpers(
89+
IModIdFormatConfig modIdFormatConfig,
90+
IColorHelper colorHelper,
91+
EditModeConfig editModeConfig,
92+
FocusFactory focusFactory,
93+
IIngredientManager ingredientManager,
94+
SubtypeManager subtypeManager
95+
) {
96+
VanillaRecipeFactory vanillaRecipeFactory = new VanillaRecipeFactory(ingredientManager);
9397
StackHelper stackHelper = new StackHelper(subtypeManager);
9498
GuiHelper guiHelper = new GuiHelper(ingredientManager);
95-
FocusFactory focusFactory = new FocusFactory(ingredientManager);
99+
96100
IModIdHelper modIdHelper = new ModIdHelper(modIdFormatConfig, ingredientManager);
97-
this.jeiHelpers = new JeiHelpers(guiHelper, stackHelper, modIdHelper, focusFactory, colorHelper, ingredientManager);
101+
102+
IClientToggleState toggleState = Internal.getClientToggleState();
103+
IngredientBlacklistInternal blacklist = new IngredientBlacklistInternal();
104+
ingredientManager.registerIngredientListener(blacklist);
105+
106+
IIngredientVisibility ingredientVisibility = new IngredientVisibility(
107+
blacklist,
108+
toggleState,
109+
editModeConfig,
110+
ingredientManager
111+
);
112+
113+
return new JeiHelpers(guiHelper, stackHelper, modIdHelper, focusFactory, colorHelper, ingredientManager, vanillaRecipeFactory, ingredientVisibility);
98114
}
99115

100116
@Unmodifiable
101-
private List<IRecipeCategory<?>> createRecipeCategories(List<IModPlugin> plugins, VanillaPlugin vanillaPlugin) {
117+
private static List<IRecipeCategory<?>> createRecipeCategories(List<IModPlugin> plugins, VanillaPlugin vanillaPlugin, JeiHelpers jeiHelpers) {
102118
RecipeCategoryRegistration recipeCategoryRegistration = new RecipeCategoryRegistration(jeiHelpers);
103119
PluginCaller.callOnPlugins("Registering categories", plugins, p -> p.registerCategories(recipeCategoryRegistration));
104120
CraftingRecipeCategory craftingCategory = vanillaPlugin.getCraftingCategory()
@@ -110,44 +126,48 @@ private List<IRecipeCategory<?>> createRecipeCategories(List<IModPlugin> plugins
110126
return recipeCategoryRegistration.getRecipeCategories();
111127
}
112128

113-
public IScreenHelper createGuiScreenHelper(List<IModPlugin> plugins, IJeiHelpers jeiHelpers) {
129+
public static IScreenHelper createGuiScreenHelper(List<IModPlugin> plugins, IJeiHelpers jeiHelpers, IIngredientManager ingredientManager) {
114130
GuiHandlerRegistration guiHandlerRegistration = new GuiHandlerRegistration(jeiHelpers);
115131
PluginCaller.callOnPlugins("Registering gui handlers", plugins, p -> p.registerGuiHandlers(guiHandlerRegistration));
116132
return guiHandlerRegistration.createGuiScreenHelper(ingredientManager);
117133
}
118134

119-
public ImmutableTable<Class<? extends AbstractContainerMenu>, RecipeType<?>, IRecipeTransferHandler<?, ?>> createRecipeTransferHandlers(List<IModPlugin> plugins) {
135+
public static IRecipeTransferManager createRecipeTransferManager(
136+
List<IModPlugin> plugins,
137+
JeiHelpers jeiHelpers,
138+
IConnectionToServer connectionToServer
139+
) {
120140
IStackHelper stackHelper = jeiHelpers.getStackHelper();
121141
IRecipeTransferHandlerHelper handlerHelper = new RecipeTransferHandlerHelper(stackHelper);
122-
RecipeTransferRegistration recipeTransferRegistration = new RecipeTransferRegistration(stackHelper, handlerHelper, this.jeiHelpers, data.serverConnection());
142+
RecipeTransferRegistration recipeTransferRegistration = new RecipeTransferRegistration(stackHelper, handlerHelper, jeiHelpers, connectionToServer);
123143
PluginCaller.callOnPlugins("Registering recipes transfer handlers", plugins, p -> p.registerRecipeTransferHandlers(recipeTransferRegistration));
124-
return recipeTransferRegistration.getRecipeTransferHandlers();
144+
return recipeTransferRegistration.createRecipeTransferManager();
125145
}
126146

127-
public RecipeManager createRecipeManager(
147+
public static RecipeManager createRecipeManager(
128148
List<IModPlugin> plugins,
129149
VanillaPlugin vanillaPlugin,
130150
RecipeCategorySortingConfig recipeCategorySortingConfig,
131-
IIngredientVisibility ingredientVisibility
151+
JeiHelpers jeiHelpers,
152+
IIngredientManager ingredientManager
132153
) {
133-
List<IRecipeCategory<?>> recipeCategories = createRecipeCategories(plugins, vanillaPlugin);
154+
List<IRecipeCategory<?>> recipeCategories = createRecipeCategories(plugins, vanillaPlugin, jeiHelpers);
134155

135156
RecipeCatalystRegistration recipeCatalystRegistration = new RecipeCatalystRegistration(ingredientManager, jeiHelpers);
136157
PluginCaller.callOnPlugins("Registering recipe catalysts", plugins, p -> p.registerRecipeCatalysts(recipeCatalystRegistration));
137158
ImmutableListMultimap<RecipeType<?>, ITypedIngredient<?>> recipeCatalysts = recipeCatalystRegistration.getRecipeCatalysts();
138159

160+
LoggedTimer timer = new LoggedTimer();
139161
timer.start("Building recipe registry");
140162
RecipeManagerInternal recipeManagerInternal = new RecipeManagerInternal(
141163
recipeCategories,
142164
recipeCatalysts,
143165
ingredientManager,
144166
recipeCategorySortingConfig,
145-
ingredientVisibility
167+
jeiHelpers.getIngredientVisibility()
146168
);
147169
timer.stop();
148170

149-
VanillaRecipeFactory vanillaRecipeFactory = new VanillaRecipeFactory(ingredientManager);
150-
151171
IJeiFeatures jeiFeatures = Internal.getJeiFeatures();
152172
RecipeManagerPluginHelper recipeManagerPluginHelper = new RecipeManagerPluginHelper(recipeManagerInternal);
153173
AdvancedRegistration advancedRegistration = new AdvancedRegistration(jeiHelpers, jeiFeatures, recipeManagerPluginHelper);
@@ -158,19 +178,11 @@ public RecipeManager createRecipeManager(
158178
recipeManagerInternal.addPlugins(recipeManagerPlugins);
159179
recipeManagerInternal.addDecorators(recipeCategoryDecorators);
160180

161-
RecipeRegistration recipeRegistration = new RecipeRegistration(jeiHelpers, ingredientManager, ingredientVisibility, vanillaRecipeFactory, recipeManagerInternal);
181+
RecipeRegistration recipeRegistration = new RecipeRegistration(jeiHelpers, ingredientManager, recipeManagerInternal);
162182
PluginCaller.callOnPlugins("Registering recipes", plugins, p -> p.registerRecipes(recipeRegistration));
163183

164184
recipeManagerInternal.compact();
165185

166186
return new RecipeManager(recipeManagerInternal, ingredientManager);
167187
}
168-
169-
public IIngredientManager getIngredientManager() {
170-
return ingredientManager;
171-
}
172-
173-
public JeiHelpers getJeiHelpers() {
174-
return jeiHelpers;
175-
}
176188
}

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

Lines changed: 1 addition & 13 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,21 +18,15 @@
1918
public class RecipeRegistration implements IRecipeRegistration {
2019
private final IJeiHelpers jeiHelpers;
2120
private final IIngredientManager ingredientManager;
22-
private final IIngredientVisibility ingredientVisibility;
23-
private final IVanillaRecipeFactory vanillaRecipeFactory;
2421
private final RecipeManagerInternal recipeManager;
2522

2623
public RecipeRegistration(
2724
IJeiHelpers jeiHelpers,
2825
IIngredientManager ingredientManager,
29-
IIngredientVisibility ingredientVisibility,
30-
IVanillaRecipeFactory vanillaRecipeFactory,
3126
RecipeManagerInternal recipeManager
3227
) {
3328
this.jeiHelpers = jeiHelpers;
3429
this.ingredientManager = ingredientManager;
35-
this.ingredientVisibility = ingredientVisibility;
36-
this.vanillaRecipeFactory = vanillaRecipeFactory;
3730
this.recipeManager = recipeManager;
3831
}
3932

@@ -49,12 +42,7 @@ public IIngredientManager getIngredientManager() {
4942

5043
@Override
5144
public IVanillaRecipeFactory getVanillaRecipeFactory() {
52-
return vanillaRecipeFactory;
53-
}
54-
55-
@Override
56-
public IIngredientVisibility getIngredientVisibility() {
57-
return ingredientVisibility;
45+
return jeiHelpers.getVanillaRecipeFactory();
5846
}
5947

6048
@Override

0 commit comments

Comments
 (0)