Résolu [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