Supplementaries x Create Pipes (Exploit) [Infinite Lumisene]
Looxond opened this issue ยท 4 comments
Description
In the latest update in supplementaries, a liquid was added known as lumisene which behaves quite different from regular liquids as a result of such strange behavior, this happens if you try to gather it using pipes.
Minecraft_.Forge.1.20.1.-.Singleplayer.2024-11-14.23-28-31.mp4
Extra log just in case: https://mclo.gs/xM9czzV
Game Log
Debug Information
No response
Would you be able to explain how this fluid normally should act like? As in what it's mechanics are since i feel like there's some context missing here
tldr: its a finite fluid with 16 layers
Not really sure what this issue is about or where it comes from exactly
maybe create is only supposed to extract source blocks and when it loses a layer, it breaks the pump? or some other thing w/ compatibility issues.
Immediate infinite dupe happens here, this is used to clear the fluid:
Create/src/main/java/com/simibubi/create/content/fluids/OpenEndedPipe.java
Lines 171 to 173 in d48a504
Which due to lumisene's implementation of createLegacyBlock just keeps placing lumisene with 2 levels left.
https://github.com/MehVahdJukaar/Supplementaries/blob/68b8224e34f07c2df5d7efbd91338f5126b69df9/common/src/main/java/net/mehvahdjukaar/supplementaries/common/fluids/FiniteFluid.java#L264-L273
Is there an underlying reason a fluid with level 0 is placed (intended to be placed, in this case), rather than something like air?
Also, Create's pump doesn't know how to place lumisene either, as lumisene isn't an instance of FlowingFluid and thus exits early:
Create/src/main/java/com/simibubi/create/content/fluids/OpenEndedPipe.java
Lines 190 to 191 in d48a504
Additionally, with the finiteness of lumisene, pumping should take into account how many layers of lumisene there actually are instead of always using 1000 as there'd still be a dupe otherwise. 1000/16 = 62.5 though so maybe that needs to be restricted to only even levels. Taking layers into account is only really relevant for pumping from the world, pumping into the world checks whether the output space has a source fluid, which lumisene always is, so there already is no adding layers onto it.