This doesn't control items passing between pipes, only a condition for a
PipedItem to prevent itself exiting the network in specific places.
This modification allows BC to have more advanced sinking conditions
(eg: the discussion about coloured pipes/items)
Logistics pipes currently modifies something via reflection to prevent
it's liquid packets from being sunk to standard IInventories.
PipeLogic is now only used by Iron and Wooden pipes. All other pipes use
the empty PipeLogic() class.
Pipe connections are now handled by the new PipeConnectionBans class.
Added a alternative payload system for update packets that uses data
streams instead of arrays. Note: It is not compatible with
@TileNetworkData so you will have to handle all the data yourself.
Also added a TankManager class to contain commonly needed code for
tanks: Serialization, TankInfo, Network Data, etc...
The Refinery still needs a fair bit of work, but its mostly limited to
the GUI filter code. That needs a complete rewrite of some kind since
Fluids aren't items and can't be rendered as such.
Some significant hurdles remain to be overcome in regard to how the
BlueprintBuilder interacts with EntityRobot.
Also, rotation and builder positioning is a massive headache that still
needs to be tackled.
Killed Engine class, merged into TileEngine and subclasses.
Converted to Forge rotation API.
Split heat from stored energy and set proper temp bounds.
Rewrote IronEngineCoolant API, changed to degree based temp reductions
(its 0.0025 times the previous values). Added support for solid coolants
(they have to melt into a liquid coolant, like Ice to Water).
There is a commented out alternative implementation for constant power
output instead of pulsed.
And fixed a issue with the PowerProvider casting objects to TileEntities
that aren't TileEntities. Fixed by adding a getWorldObj() function to
IPowerReceptor.
PowerFrameWork is gone.
PowerProvider is final.
Can have multiple PowerProviders (one for each block side).
PowerProviders can either accept power from pipes or they can't, defined
in constructor.
Removed a bunch of excess code that just cluttered the API.
Its now restricted to Wooden Power pipes.
Before:
The trigger was useless because it was triggering off the powerQuery
array which was always true so long as there was any device on the
network requesting power. This made it rather useless for scaling
production to demand.
After:
It now triggers whenever the Wooden Power Pipe's internal power buffer
drops below a certain point. This however required a modification of the
wooden pipe's internals because it was getting stuck in the "Off" state
due to how it handled transferring power from the buffer to the pipe
network.
Anyway, it works now and is somewhat useful.
Note: The Wooden Power Pipe's internal buffer stores 1500 MJ, this was
true even before this commit.
Requests Energy: Activated when the pipe has an active power request.
Use to allow your network to respond to demand dynamically.
Energy Overloaded: Activated when the pipe turns red, in case anyone
wants to know when that happens.
Its now the same as the quarry, 60 MJ per block.
Also tweaked power provider settings on the Mining Well and Quarry to
prevent smaller engines from being unable to overcome the maintenance
drain.
This is an interesting commit, it not only fixes the RS Cells
(@King_Lemming) it also makes it so the network can respond to demand as
needed by shutting down overheating engines, since the pipes won't
accept power now unless something is requesting it.
@King_Lemming this will break compat with RS Cells because you're doing
it wrong. Don't use powerRequest() like that and don't ignore the return
of receiveEnergy().
PS. It was already broken because the cell was just throwing power away
because it was ignoring the return of receiveEnergy().
...instead of their neighbor. The result being that they are constrained
by the new limits and that they actually render the power flow in
themselves.
Wooden Pipes are set with a input cap of 32 MJ/t, buffed from the
previous effective limit of 29 MJ/t.
Note that this also effectively adds a 32 MJ/t pipe that can be used for
limiting flows.
Split inventory into input/output sections.
Added support for retrieving ingredients from neighboring inventories.
Yes, this means crafting chains are possible.
Various other minor tweaks to when it requests power, how it decides it
has everything it needs to craft, etc...
Can only remove 1 item at a time, but that's almost always sufficient.
Also added a bunch of helper functions in InvUtils (moving items between
inventories, counting items, etc..).
Item and Power.
Item Pipe won't connect to Stone or Cobblestone and has half the
friction of Stone.
Power Pipe takes the place of Gold (64 MJ/t) and bumps Gold and Diamond
up to 256 MJ/t and 1024 MJ/t respectively. Expanding the upper tier
power distribution capacity.
Various textures adjusted to keep pipes distinct.
This pattern is basically the old Flatten pattern that would clear all
the way to the sky.
Recipe
GGG
GGG
BBB
Flatten got a matching recipe:
GGG
BBB
BBB
This NEEDS extensive testing. I only have a vague idea how this code
works.
The original code was just tossing any power beyond what it could
handle, with no throttle on how much it was requesting from its
neighbors.
I think its working, more or less, but you'd probably have to hook it to
some TE Cells or something to know for sure.
Explosions are gone, loss over distance is gone.
Added two new Power pipes, Cobble and Diamond.
All pipes have much smaller max throughput:
Cobble = 8 MJ/t
Stone = 16 MJ/t
Gold = 64 MJ/t
Diamond = 256 MJ/t
The power display will turn red if a pipe has hit its max capacity. You
can use smaller pipes to throttle certain parts of your power net.
Machines are more lossy now to make up for the lossless pipes. Expect
low power draws even when idle.
Also added on/off Gate action support to lasers and ACTs.
It now processes in columns, greatly increasing the performance.
It is no longer halted entirely by anything it can't break. In other
words, you can use it to fill over bedrock.
Changed how the clear portion works, it no longer clears all the way to
sky, instead it only clears IN the box.
It was possible to get the item in a phantom slot with the new inventory
management features. This prevents for example the item double click
feature (make stack) to take items from the ghosted inventory.
Also reduced Oil Ocean Biome chances again.
Previously it was using the same noise field for all seeds. Now it
randomly offsets the noise field based on the world seed. Its not truly
random, but at least you won't be able to travel to the same coordinates
in every world and find an Oil Biome.
Renamed "Auto Workbench" to reduce confusion with the "Advanced Crafting
Table".
Once again I barrowed liberally from Railcraft. This time from the
Rolling Machine. You will recognize the new GUI.
Auto Workbenches are 100% compatible with vanilla Hoppers, or whatever
you want to use to interface with it. It no longer implements
ISpecialInventory at all. Even RP2 would work with it now.
Implemented the same "Sample Output" vs "Real Output" design that the
Rolling Machine uses. If there are enough items to craft multiple times,
it will craft automatically. But if there are only enough items for one
craft job, you must click the sample output slot to start the process.
Separating the display from the output helps reduce the complexity of
the code by a large factor.
Banned all items that can't stack or that have containers from being
used in the Auto Workbench. Supporting these types of items is the major
reason the previous version was so buggy. The Advanced Crafting Table
does a much better job with that kind of thing, use it instead.
Crafting now has a time cost. It take 256 ticks to craft an item. Unlike
the Rolling Machine, it DOES NOT require power.
Removed ability to pull from adjacent inventories. Its laggy, complex,
and unnecessary now. If you need more capacity, use a Hopper or Chute.
It was an O(n^2) operation to insert an item. Now its just O(n). The
functions for checking to see if a stack is valid in a slot are
expensive and should never be called more than once per slot, let alone
n^2 times (where n is the length of the inventory).
Additionally, by wrapping inventory in a slot iterator, I was able to
eliminate the need to handle FSided and VSided differently from
IInventory.
And replaced BC's Advanced Slot System in Advanced Crafting Tables,
Emerald Pipes and Diamond Pipes.
The advantages of the Phantom Slot System is that it uses the same
Mojang code for net sync that normal Slots do. This results in much
simpler code and the slots can be treated just like any other inventory
slot instead of all the special case code that Advanced Slot does.
The Advanced Slot System is still used in several places (Assembly
Tables, Refineries, etc...), Gates but in these cases the Slot often
contains non-ItemStacks. So I'm not going to touch them for the moment.
Additionally, I cleaned up the names of some of the classes in the
Silicon package.
Add Ocean Oil Field and Desert Oil Field biomes. Rare chance of
spawning. I only found a single Ocean Oil Field within 4k blocks of
spawn. But if you find one, you will never run out of Oil, ever.
These two biomes have a 40x multiplier on oil spawn chance.
They can be disabled by setting the biome Id in the config to -1.
The chunk spanning gen code turned out to be unnecessary. The real
problem was that the Lake gen code was poorly balanced. That's fixed
now.
I've also added some code to prevent Wells and Lake from spawning on
overly rough terrain. No more wells on the edges of cliff faces for
example. I had to rebalance the spawn chances though. Of note is the
fact that I increased the chance multiplier for surface deposit biomes
from 1.5 to 4. Distribution balance may need some more work.
Additionally, I've started work on an Oil Field biome, a rare biome that
spawns massive amounts of Oil. Its currently disabled, but the ground
work is there. Next step is creating a suitably sparse Simplex noise
field for the biome replacer.
I recently did a major overhaul of Railcraft's button code for some
upcoming features. Figured I backport it to Buildcraft as well.
Texture information was abstracted into an easily swapped object.
Multi-Buttons can now have different textures for each state.
Added tool tip support for all buttons (with mouse over delay!).
Added textures and states for a "Lock" Multi-Button.
Greatly reduced code duplication.