For the generator, make 2 blocks in an enclosed space. For this example, we'll use 1x2x5 bricks, broad side facing eachother. Looks like this:
O       O
O       O
"O" being brick studs.
Now lets name the ones on the left "Fire" (We'll make it green") and the other one "Receive" (yellow")
O       O
O       O
First, we'll apply the following events to "Fire", or the green brick.
0   ☑   [400]   OnRelay - Self - FireRelay
1   ☑   []   OnRelay - Self - SpawnProjectile [Pong] [X] [X] [X]*
*Mess around with the coordinates until they aim at "Receive". Only one coordinate should have a value, and it should take about a half of a second for it to hit it.
Projectile is optional, but I prefer pong.
Simple event, huh?
Make a separate brick of any type to start up the generator. I would prefer a JVS button, but the choice is up to you. Apply the following event:
0   ☑   []   OnActivate - NamedBrick [Fire] - FireRelay
Done. Now select the "receiver" brick and enter it's events. This one is a little bit harder. Add these:
0   ☑   []   OnProjectileHit - Self - FireRelay
1   ☑   []   OnRelay - Self - VCEModVariable [Ingots] [Add] [3]
2   ☑   []   OnProjectileHit - Projectile - Delete
For this example our variable is called "Ingots". Our generator is done! We'll test it later, now on to our power user!
We'll use a lamp for this example. Build your lamp, and enter the wrench menu for the brick you want the light on. Enter events. Apply the following:
0   ☑   []   OnActivate - Self - FireRelay
1   ☐   [5000]   OnRelay - Self - FireRelay
2   ☑   []   OnRelay - Self - VCEIfVariable [<var:nb_receive:Ingots>] [>=] [3] [3 4]
3   ☑   []   OnVariableTrue - Self - SetLight [Player's Light]
4   ☑   []   OnVariableFalse - Self - SetLight [None]
5   ☑   []   OnVariableTrue - NamedBrick [Recieve] VCEModVariable [Ingots] [Subtract] [3]
6   ☑   []   OnVariableTrue - Self - VCEModVariable [lamp1power] [Set] [1]
7   ☑   []   OnVariableFalse - Self - VCEModVariable [lamp1power] [Set] 0
8   ☑   []   OnActivate - Self - VCEIfVariable [lamp1power] =/= 0 [9 9]
9   ☑   []   OnVariableFalse - Client - Bottomprint [The generator does not have enough power do supply this object!]
NEW: EXTRA
Checker
Want to check the number of ingots?
Make a brick (preferably a print ramp with a computer image) and event the following:
0   ☑   []   OnActivate - Client - Centerprint [The generator currently has <var:nb_receive:ingots> ingots stored!]
NEW: ANOTHER EXTRA
Manual Pump
Need power fast? Want to go green? This brick will add one ingot each time it is clicked for extra generation!
Make a brick (Do not use a JVS button that has to reload, use a regular brick!) and apply the following:
0   ☑   []   OnActivate - Self - VCEModVariable [<var:nb_receive:ingots> [Add] [1]
1   ☑   []   OnActivate - Client - Centerprint [Nice! You just manually generated an ingot!