1.14.4 [1.14.3] Problème durant la compilation avec ScreenManager.registerFactory()



  • Bonjour, j'ai un problème durant l'assemblage du mod et seulement avec l'assemblage (aucun problème quand je lance le serveur dédié ou le client) avec la fonction ScreenManager.registerFactory() invoquée ici :

    public class ClientProxy implements IProxy
    {
    	@Override
    	public void init()
    	{
    		ScreenManager.registerFactory(ContainerTypeRegistry.CRAFTER, (container, playerInventory, title) ->
    		{
    			return new CrafterScreen(container, playerInventory, title);
    		});
    
    		...
            }
    }
    

    Prenant en paramètre le ContainerTypeRegistry.CRAFTER définie au lancement comme-ci :

    public static final ContainerType<CrafterContainer> CRAFTER = IForgeContainerType.create((windowId, inv, data) ->
    {
    	BlockPos pos = data.readBlockPos();
    	return new CrafterContainer(windowId, MainRegistry.proxy.getClientWorld(), pos, MainRegistry.proxy.getClientPlayer());
    });
    

    et d'une nouvelle instance de CrafterScreen qui extends ContainerScreen<CrafterContainer> qui elle-même implements (comme demandé) IHasContainer<CrafterContainer>.

    L'erreur que j'ai dans la console et que je ne comprend pas :

    C:\Emotion's Mod\1.14.3\src\main\java\fr\emotion\emomod\proxy\ClientProxy.java:44: error: incompatible types: cannot infer type-variable(s) M,U
    		ScreenManager.registerFactory(ContainerTypeRegistry.CRAFTER, (container, playerInventory, title) ->
    		                             ^
        (argument mismatch; cannot infer functional interface descriptor for IScreenFactory<CrafterContainer,U>)
      where M,U are type-variables:
        M extends Container declared in method <M,U>registerFactory(ContainerType<? extends M>,IScreenFactory<M,U>)
        U extends Screen,IHasContainer<M> declared in method <M,U>registerFactory(ContainerType<? extends M>,IScreenFactory<M,U>)
    


  • Si tu met implicitement les types de cette manière, ça marche pas non plus ? :

    ScreenManager.<CrafterContainer, CrafterScreen>registerFactory(....);
    


  • Ça à l'air de marcher, merci beaucoup 🙂 Ce serait quoi l'explicitation, que l'assemblage refuse les "lambdas" (j'y comprend rien à ça mais bref) en wildcard ?



  • Je pense que comme CrafterScreen extends ContainerScreen<CrafterContainer>, le compilateur arrive pas à décider du type à utiliser pour la lambda, alors que le compilateur de ton IDE choisit automatiquement un des deux


Log in to reply