Skip to content

Commit 601e452

Browse files
committed
Optimize by caching unsupported containers that throw on getType()
1 parent e10b47c commit 601e452

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

Library/src/main/java/mezz/jei/library/recipes/RecipeTransferManager.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@
1111
import net.minecraft.world.inventory.MenuType;
1212
import org.jetbrains.annotations.Nullable;
1313

14+
import java.util.HashSet;
1415
import java.util.Optional;
16+
import java.util.Set;
1517

1618
public class RecipeTransferManager implements IRecipeTransferManager {
1719
private final ImmutableTable<Class<? extends AbstractContainerMenu>, RecipeType<?>, IRecipeTransferHandler<?, ?>> recipeTransferHandlers;
20+
private final Set<AbstractContainerMenu> unsupportedContainers = new HashSet<>();
1821

1922
public RecipeTransferManager(ImmutableTable<Class<? extends AbstractContainerMenu>, RecipeType<?>, IRecipeTransferHandler<?, ?>> recipeTransferHandlers) {
2023
this.recipeTransferHandlers = recipeTransferHandlers;
@@ -39,25 +42,30 @@ public <C extends AbstractContainerMenu, R> Optional<IRecipeTransferHandler<C, R
3942

4043
@Nullable
4144
private <C extends AbstractContainerMenu> MenuType<C> getMenuType(C container) {
45+
if (unsupportedContainers.contains(container)) {
46+
return null;
47+
}
4248
try {
4349
@SuppressWarnings({"UnnecessaryLocalVariable", "unchecked"})
4450
MenuType<C> cast = (MenuType<C>) container.getType();
4551
return cast;
4652
} catch (UnsupportedOperationException ignored) {
53+
unsupportedContainers.add(container);
4754
return null;
4855
}
4956
}
5057

5158
private <C extends AbstractContainerMenu, R> Optional<IRecipeTransferHandler<C, R>> getHandler(Class<? extends C> containerClass, @Nullable MenuType<C> menuType, RecipeType<?> recipeType) {
52-
return Optional.ofNullable(recipeTransferHandlers.get(containerClass, recipeType))
53-
.filter(handler -> {
54-
Optional<? extends MenuType<?>> handlerMenuType = handler.getMenuType();
55-
return handlerMenuType.isEmpty() || handlerMenuType.get().equals(menuType);
56-
})
57-
.flatMap(handler -> {
58-
@SuppressWarnings("unchecked")
59-
IRecipeTransferHandler<C, R> cast = (IRecipeTransferHandler<C, R>) handler;
60-
return Optional.of(cast);
61-
});
59+
IRecipeTransferHandler<?, ?> handler = recipeTransferHandlers.get(containerClass, recipeType);
60+
if (handler == null) {
61+
return Optional.empty();
62+
}
63+
Optional<? extends MenuType<?>> handlerMenuType = handler.getMenuType();
64+
if (handlerMenuType.isEmpty() || handlerMenuType.get().equals(menuType)) {
65+
@SuppressWarnings("unchecked")
66+
IRecipeTransferHandler<C, R> cast = (IRecipeTransferHandler<C, R>) handler;
67+
return Optional.of(cast);
68+
}
69+
return Optional.empty();
6270
}
6371
}

0 commit comments

Comments
 (0)