Should every interface in the api for example IItemstack have a method to get the equivalent objet in minecraft or should be a class like MinecraftConversion or something like that, to convet the IItemstack to a Itemstack?
Should the api add a way to get an IItemStack from an ItemStack and vice versa? If the api adds this possibility then the modder must control their access to minecraft to be able to work in different versions, but allow to use utilities in minecraft that the api don't have yet.
At this point where the gui is rendered using components, and there is only one important method, initGui(IGui parent); I think that the gui should be merged with the container so instead of having to do an IGuiDefinition and an IContainerDefinition, there will be only the IGuiDefinition with initGui(IGui parent) and the container methods.
Actually the api handles TileEntities using ITileEntityDefinition and ITileEntity, but it can work just using a class that extends TileEntity marking all vanilla methods with @deprecated and adding new ones to achieve independence from Minecraft. This is a bad way to isolate the api from minecraft but allow to add custom interfaces to the TileEntity, so you can use apis from other mods. I want to allow compatibility between mods even if they are from different apis, but I think that @opcional is a pretty bad way to implement apis from other mods.