I really feel like a lot of people are either missing the point or not understanding what a universal API could mean and do, so I'm going to do my best to explain what I think it means and how every current power system could convert to it without any users noticing the difference.
I think the API should define only two things.
1. A universal power unit, probably based on how many ticks a lump of coal burns in a furnace. (Most mods already do used units based on that, they just use different ratios).
2. Universal Interfaces to define how power can enter and exit tiles, items, and maybe other things.
For a full explanation on how I think the API should work, read my previous
post here.
And now how all current systems can use that and still not seem to change. Let's start with IC2. I have used it's API in one of my own mods,
Liquid Fuels, to power machines, so while I know a bit, I could make some incorrect assumptions, so please bear with me.
When you place an IC2 machine down into the world, it sends an "event" basically a message, saying it was added and giving it's world coordinates and a reference to itself. (Cables, storage and generators do the same)
A class in IC2 receives this message and says "ok, now are there any cables or power sources next to this machine?" If there are, it traces the cables back to the sources, either a storage blocks or a generators and say "here is a possible output, and here is how many blocks away it is (and maybe what kind of cable it is?)"
When the source ticks, it asks each of it's outputs, which could be storage block or machines, "hey, how much power do you need?" and if it does need some, it says "Ok, here it is!" and reduces the power based on the transmission loss and then passes what's left to the machine or block.
I THINK, although I could be wrong, but I think this is when a block asks "is this too much power for me to handle?" And if yes, it says "Uh oh, BOOM!" This might also be when cables short out. I'm not sure about that, but I'm pretty sure the cables don't every hold any power of their own. Power jumps from block to block in packets and doesn't exist inside the cables ever. This reduces lag.
Now, using the universal API, this is how it would work.
When you place a block, it won't do anything, but the cables next to it would notice and they would say "Hey new guy, are you a powered block?" If that block says "Yes, I'm a powered block" the cable will send an event to IC2 alerting it of the new block.
Then that same IC2 class catches the event and does the same tracing, but instead of going all the way to the source blocks, it would only go to the cables that touch source blocks.
When those source cables are ticked, they will ask the block next to them if it can emit any power. If that block says "Yes, I can emit this much!" Well, the cable will short if it's too much, but if it's not, it will check it's outputs saying "Do any of you blocks need power?" If one says "yes, I need this much" the cable will reduce the amount based on the cable length and then send the rest.
If that block is also an IC2 block, it can then check and say "Was I given too much power?" And if so, "Uh oh, BOOM!".
This might cause a bit of lag compared to the previous design, because the cables will have a lot more to do, and of course you'll have a lot more of them, but other than that, to a user it would seem identical. And here's the thing, nothing about the numbers needs to be different to the user. IC2 could still CALL it's power EU. It could still use the same GUIs, it could still say that machines use 32 EU per tick, or that Bat Boxes emit 32 EU per tick, and all that. It could either convert the units just for display, or it could convert them between each transaction (which could itself be used to provide a tiny amount of loss by always rounding down). In other words, when the cables receives power, it could turn it to EU and use that for transmission max and loss, then turn it back and give it to the next block. If that block is also an IC2 machine, it could turn it right back to EU to use for display, (or just convert it for display only and store the value in the universal units). A user won't even notice the difference. Cables would still have different capacities, machines could still blow up, the packet system would still work, and users would still see everything in EU, the only difference is that it could work with any other blocks from other mods using the API.
Now for Buildcraft, which again, I've used in Liquid Fuels, and I might make mistakes.
When a machine is placed, pipes next to it check "Hey, are you an IPowerHandler?" And if yes, they connect and save that connection. Engines do the same when placed, and they also try to point toward the first pipe or machine they find.
That machine MUST have a PowerHandler inside of it, and tell it how much power it can except, how much power it can store and other things like that.
A machine gets it's power from the PowerHandler, not storing it itself or communicating with the pipes or engines around it in any way. This is one of the things that King Lemming was not happy about since it means the PowerHander has FULL and TOTAL control on how power flows, is stored, and how the power "leaks" and there isn't much that any block can do if it doesn't like that.
A machine can also I THINK choose to tell the PowerHandler "Hey, get power please" At any time.
The PowerHander asks for any pipes next to it "Hey, can I have some power?" And those pipes can say "Yes, here you go" and give it to them.
The pipes themselves store power inside of them, with the different kinds of pipes storing different amounts and since they can all send their full amount that also changes how much power they can send. This is another thing King Lemming didn't like because it means each pipe is doing things and therefor more stuff is happening each game tick, meaning there is more lag than IC2's packet system.
Engines try to add the power they make to the pipes or machines they are pointed towards on their own time.
Now, using the universal API, this is how it would work.
When a block it placed next to a pipe the pipe will say "Are you a powered block?" and if yes it will point to it. And again, Engines will look for "Powered blocks" and point toward it.
When the pipe is ticked it will check first the blocks around it "Hey, do you need power?" And if yes, the pipe will give it to the block. After checking for blocks, it will check for pipes and pass it's power along to them just like it does now.
Engines will basically do the same for whatever machine or block they are attached to.
It wouldn't change how power flows through the pipes at all, only how the pipes talk to engines and machines. So machines could still "leak" if they want to, even if powered by another universal power system. And again, they could still call it MJ, translating it either for display or between inputs and outputs.
And not only would the two systems work exactly the same as they do now (to the user) they would work together. Because MJ doesn't explode or have loss, it might be good for pumping huge amounts of power long distances, while EU can be stored and generated on demand. So you could have a system using a nuclear reactor producing MJ when needed with a Gate, then pump that through pipes and store it in several MFSUs. They you can use pipes to pull the energy out and choke it to put the energy into IC2 machines, and since it's not limited by packets, it could move a lot more power. Or you could use EU to run forestry machines and have a simple redstone switch on a bat box to prevent power from leaking when you're not using them. Or use Steam Engines to power your IC2 Mass Fab, or use IC2 Solars to offset your Rolling Machine's power leak.
What I'm trying to say is that although they could each work on their own just as they do now, when combined one would not supplant the other, and neither would be obsolete, instead it would provide more freedom for users to combine the best parts of each mod to their own advantage.
And now, for Blutrcity! (Am I spelling that right?)
Eloraam once tweeted that professionally, she works as an Electrical Engineer, and it shows in Blutricity, which works almost exactly like real electricity.
In Blutricity, every block acts both as a cable and a battery, storing some amount of power and also transmitting it. Each "conductive" block stores it's own power, and each time it's ticked, it tries to balance it's power with it's neighbors. Machines and the Battery Box have extra storage when the normal cable storage gets above a certain point, and the battery saves its, or releases it if it's cable energy drops too low.
That's it really. Power flows as a machines uses it and reduces it's store of power, drawing from the cable and causing the cable next to it to try to give it enough power to keep them balanced, then the cable next to it tries to give it enough power to balance and so on and so on until it reaches the generator.
Really, with a universal API, Blutricity would only need to change the ways each cable talks to each other using the new API. Fundamentally it wouldn't have to change at all. This would mean that not only could you power IC2 or MJ machines with Blulectric cables, but a Blulectric machine would power the machines next to it without needing any other cables at all. Use EU to power THAT and you've got an Alloy Furnace that also powers the IC2 machines touching it.
A few more power systems. I think that King Lemming's redstone conduits and presumably the new Redstone Flux system works a lot like IC2, so I don't feel the need to explain it again, plus I'm not very sure. Universal Electricity also works a lot like EU, with packets and stuff. Again, I'm not very filmier with UE so I'm not 100% sure of that. I also am not sure about Factorization Charge, but I think it's basically just like Blutricity.
So, in conclusion, I argue that while yes, it will take a lot of work to translate these systems to a new API, it would be possible to do so without changing the fundamental ways in which they work. They could all still be unique and have their own advantages and disadvantages. I don't think that converting them to work together would make any of them obsolete or prevent any of them from losing any features. In fact, I believe that the ability to combine these mods will allow for much more user customization and the freedom to mix-and-match different systems will make each one shine brighter and be more useful together then they could be apart.
Sorry for creating such a huge wall of text, it's just who I am. And thank you to anyone who put in the effort to read the whole thing.