Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Quantum Storage Controller Network #1963

Open
wants to merge 164 commits into
base: master
Choose a base branch
from

Conversation

ghzdude
Copy link
Contributor

@ghzdude ghzdude commented Jul 16, 2023

What

Implements the Quantum Storage Controller, a block which combines the inventories of connected Super/Quantum Tanks/Chests to allow I/O from attached storages. This PR continues the work of the ds-quantum-storage-improved branch.

Implementation Details

  • Quantum Storage MTEs use IDs 1757 - 1760
  • Implements interfaces IQuantumStorage and IQuantumController.
  • Implements abstract class MetaTileEntityQuantumStorage with logic to handle dis/connecting from the Quantum Controller.
  • Quantum Controller has logic to rebuild it's network and a handler to handle I/O from attached storages
  • Item I/O from the Quantum Controller handler is working, but could be improved I think.
  • Rendering of the Quantum Controller should be discussed, if current rendering is not desired.
  • Creative Quantum Tank/Chest works with the storage controller as well
  • Creative Tank/Chest will only output from the storage controller if it is active
  • Normal Creative Tank/Chest behavior (auto-output to the output face) is disabled if connected to a storage controller

To-do

  • Implement MTEs
    • Quantum Storage Controller
    • Quantum Storage Extender
    • Quantum Storage Proxy
  • Add textures for...
    • Quantum Storage Controller
    • Quantum Storage Extender
    • Quantum Storage Proxy
  • add recipes for...
    • Quantum Storage Controller
    • Quantum Storage Extender
    • Quantum Storage Proxy
  • change the connection icon to the GT logo and put it in the bottom right corner
  • add energy usage
    • TOP
    • Hwyla
  • add indicator overlay
  • add controller highlight rendering to connected qchests/qtanks

Outcome

Players can connect several super/quantum chests/tanks together and I/O from them all.

Additional Information

8mb.video-Tmh-Y5Mci6p6.mp4

Potential Compatibility Issues

Existing instances of super/quantum tanks/chests should not be affected, otherwise no other compatibility issues afaik.

@ghzdude ghzdude added the type: feature New feature or request label Jul 16, 2023
@IntegerLimit
Copy link
Contributor

Completely rendering fluid drawers (and by extension, storage drawers) useless. Yes!

@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch from 06875fc to 06ca325 Compare July 21, 2023 04:28
@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch 2 times, most recently from e9023fc to 18c642d Compare August 5, 2023 02:54
@ghzdude ghzdude marked this pull request as ready for review August 5, 2023 02:56
@ghzdude ghzdude requested a review from a team as a code owner August 5, 2023 02:56
@ghzdude ghzdude requested a review from a team as a code owner October 25, 2023 03:45
@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch from 38a72bd to db6b4e5 Compare October 25, 2023 03:47
@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch 3 times, most recently from fe4e233 to e683522 Compare November 3, 2023 00:27
@ghzdude ghzdude changed the base branch from master to 2.8 November 3, 2023 00:29
@ghzdude ghzdude changed the base branch from 2.8 to master November 12, 2023 22:04
@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch from b79438f to 407b55a Compare November 17, 2023 01:10
@ghzdude ghzdude closed this Nov 17, 2023
@ghzdude ghzdude deleted the gh-quantum-storage-improvements branch November 17, 2023 04:30
@ghzdude ghzdude restored the gh-quantum-storage-improvements branch November 17, 2023 04:37
@ghzdude ghzdude reopened this Nov 17, 2023
@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch from 49f4503 to 0cad266 Compare November 19, 2023 23:10
@ghzdude
Copy link
Contributor Author

ghzdude commented Nov 21, 2023

this pr will be ready for review once the 2.8 branch is merged into master and I rebase it if need be

@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch from 9522a08 to f3f08c2 Compare November 23, 2023 03:00
@ALongStringOfNumbers ALongStringOfNumbers added this to the 2.9 milestone Nov 25, 2023
@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch from e2d42bd to 5673111 Compare November 27, 2023 08:35
Copy link
Contributor

@ALongStringOfNumbers ALongStringOfNumbers left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The controller the tank/chest is connected to in the GUI is a nice touch, but if possible, it might be even nicer to have it as a clickable button that highlights the controller in world.

Also, I am having thoughts about the Controller having a GUI that lists all the fluids/items that are stored via connected tanks/chests.

Also, thoughts on the controller having a power upkeep requirement?

In addition, I think that the parts should be gated differently, but that is just me, we will have to see what everyone else thinks

Also, I am not sure about the need for the ULV super tanks/chests. The super chest 1 is available extremely early (basically only needs 4 LV circuits), so I think relying on our crates is fine until this point.
If it is decided to keep these, then they need recipes.

I encounter a slight error in linking, detailed more in discord.

Could this PR make use of the Neighbor cache with MTE.getNeighbor, instead of calling GTUtility.getMTE

@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch from 662e893 to 55f8fcb Compare December 7, 2023 03:00
@ghzdude
Copy link
Contributor Author

ghzdude commented Dec 8, 2023

The controller the tank/chest is connected to in the GUI is a nice touch, but if possible, it might be even nicer to have it as a clickable button that highlights the controller in world.

:servernotforrendering: :trollface: (Honestly not a bad idea, but i'd have to figure out rendering to do that)

Also, I am having thoughts about the Controller having a GUI that lists all the fluids/items that are stored via connected tanks/chests.

I don't know about this, you could just as easily slap an AE2 storage bus on the controller or proxy to see all the items or fluids.
I feel like trying to implement this will result in duping crafting station 2.0, and this could maybe wait for new MUI to be implemented.

Also, thoughts on the controller having a power upkeep requirement?

Hmm, this could be interesting. I'd probably add an "energy acceptor" type block to power the quantum controller network (to keep the sides of the controller or proxy open for I/O)

Also, I am not sure about the need for the ULV super tanks/chests. The super chest 1 is available extremely early (basically only needs 4 LV circuits), so I think relying on our crates is fine until this point. If it is decided to keep these, then they need recipes.

The idea behind the ULV chests/tanks is that they can compete with drawers from Storage Drawers, which mostly need wood to craft. Though, it does seem that LV super chests are much cheaper compared to LV super tanks. Maybe the ULV chest isn't that much more cheaper, but a ULV tank certainly would be. A ULV tank could probably take a bronze drum, wrought plates, and something to replace the pump, For the ULV chest, it could take some wrought iron, a bronze crate, and ULV-tier circuits,

@ALongStringOfNumbers
Copy link
Contributor

Also, thoughts on the controller having a power upkeep requirement?

Hmm, this could be interesting. I'd probably add an "energy acceptor" type block to power the quantum controller network (to keep the sides of the controller or proxy open for I/O)

I did some thinking on it, and thought that if implemented, it should be kept pretty low. The numbers I was thinking about internally were 8 EU/t per connected Tank/Chest and 2 EU/t per connected extender. And yeah, an "energy acceptor" type block could be a nice solution to keep some faces free on the controller.

:servernotforrendering: :trollface: (Honestly not a bad idea, but i'd have to figure out rendering to do that)

I think Trouser's AE fork does something like this, if you need a possible example. From the interface terminal for highlighting interfaces in the world

ideally, a full rebuild is only necessary once at load
make energy container list protected
revert back to EnergyContainerList
prevent dynamos from looking for networks
simplify controller searching a bit
add type pos map to make iteration over specific types faster
fix creative tank showing fluids weirdly
This reverts commit 06938f0
move logic to new method
handle type pos map better
@ghzdude ghzdude force-pushed the gh-quantum-storage-improvements branch from d88c2a3 to 0d77b59 Compare October 9, 2024 02:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: feature New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants