1111import  net .minecraft .world .inventory .MenuType ;
1212import  org .jetbrains .annotations .Nullable ;
1313
14+ import  java .util .HashSet ;
1415import  java .util .Optional ;
16+ import  java .util .Set ;
1517
1618public  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