Water in the overworld should move pretty quickly. Are you seeing messages in the console about "can't keep up"?
How fast are you expecting the water to move / how fast is it moving? What exactly is your "wall of water" setup?
===
4Head: Looking over your 2.0 code, https://gitlab.com/oleduc/minecraft-finite-fluids-v2.0/blob/master/src/main/java/com/mcfht/rfo/RFOCommands.java, commands need to throw an exception when they fail. Look at the decompiled source for vanilla commands, for example. The issue that I know of is supporting command blocks that test for success/failure, there may be other issues as well (I have no clue how console commands on servers wind up working, for example).
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
The speed of flow depends on difference in water levels. If your source block is only slightly fuller than the neighbor, like a small river, it won't flow as fast as a solid wall -- which in testing collapses and falls and spreads quickly.
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
The Meaning of Life, the Universe, and Everything.
Location:
Half Past Invisible
Join Date:
12/18/2011
Posts:
45
Minecraft:
captcha142
Member Details
1.7.10 refers to the release 1.7.10, not the beta one, right? Probably a stupid question, but...
Also, seeing that this has been in development for 2 years, how close are you to a full release? I remember for about a year going back to djoslin's page every day to see if there was an update before finally seeing that it was dead. I want to make sure that doesn't happen again.
1.7.10 refers to the release 1.7.10, not the beta one, right? Probably a stupid question, but...
Also, seeing that this has been in development for 2 years, how close are you to a full release? I remember for about a year going back to djoslin's page every day to see if there was an update before finally seeing that it was dead. I want to make sure that doesn't happen again.
Keybounce - the maintainer of the legacy codebase - just made a comment on 4HT's code in 2.0 two days ago - you can be safely assured that the mod is still being worked on in some capacity.
ETA is likely anybody's guess, a lot of developers find it rude and annoying when people ask such things (because it's impossible to say, and any work spent in estimating a release time would take away actual development time. In other words, the answer is almost always "when it's ready" up until the final stretch).
The big difference between 4Head's and mine is that he is focusing on full threading, while I am focusing on getting mod compatibility and a rainfall cycle. Chances are that 4Head will take most of what I do and incorporate it.
Right now, for example, I need to figure out a way to get RoC Hydro's working. The entire block 8/9 distinction in RFO is NOT the same as the vanilla distinction -- vanilla uses 8 (flowing) for "the state of this block and neighbor flow is changing", and meta-data values are used for source vs flowing. (RFO uses 8 for not-full, 9 for full, as well as meta-data for volume). Hydro's want non-zero meta-data for "falling" water, with a zero meta-data "source" block at the top. But if I have a solid column of falling water, every block is "full", so has a zero meta-data even if falling.
While I have an "easy" fix to mark falling blocks -- and I should do that just for compatibility -- figuring out how to make the top of the column "0" (not falling) instead of "8" (falling) remains undetermined.
The rest?
I want to take all of the updates out of "server tick" and put them into "dimension tick" -- /forge tps does not report accurate numbers right now.
I want to separate completely -- two separate lists -- the water and lava update lists, *per dimension*. The issue here is the need for lava blocks to re-queue themselves all the time, with the nether being a performance disaster as a result.
But both of those make the "per-run limit" hard to enforce. On the other hand, if I can make it work, then I can flow water over *the entire world*, rather than just near players. (Think machines that will continue to work properly if loaded, even if a player is not nearby).
And, I want to make lava in the nether flow the same as water in the overworld -- that's pretty much how vanilla nether lava flows. This requires more settings.
Meanwhile, I took a look at 4Head's command system, and I'll probably grab most of that -- his system results in commands updating the config file automatically. That works perfectly on servers, and single-player systems where there is only one world per profile. Things fail if you have more than one world/save per single-player profile (All worlds will have identical settings).
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
Sorry. I wasn't really looking for a time estimate, but more of a 'We've got about half of the features we want to add coded in' kind of thing. Also my computer is lagging badly when I use a browser of any kind, yet it runs minecraft decently O.o
I tried increasing the values to see if that would make it faster, which it didn't. I have an i7-3630QM CPU and 8 gb of ram. What specific values should I change in the config to make the water faster?
Looking over the config file, I see the following:
I:UpdateRangeFar=2
# High priority update range (in chunks) [range: -1 ~ 32, default: -1]
I:UpdateRangeNear=-1
# Estimate of max number of distant block updates [range: 0 ~ 10000000, default: 30000]
I:globalFarUpdates=40000
These three will be the biggest effect. If Near is turned on, then fluid in that range will be flowed every time the server checks, regardless of how much it slows the server down. The globalFarUpdates is what you adjust if you are getting warnings about too many fluid blocks and a server slowdown. The update range far is what you adjust if you want fast response of fewer blocks.
So, if you can handle 30,000 blocks without slowdown, and it turns out that Far has to be down to 3 to run under that count, then you have that as your settings.
# The ideal number of ticks between each update sweep [range: 1 ~ 64, default: 5]
I:globalIdealUpdateInterval=1
# The largest allowed number ticks between each update sweep [range: 3 ~ 64, default: 10]
I:globalMaxUpdateInterval=10
I believe (I have not played with this code yet) that this says, "Try to process every tick, but if you are slowing the system, drop down as low as every 10 ticks".
For water, I think it will try to flow every tick if you ask it to (lava flows slower).
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
Well, I have a version with diagonal flow disabled. No more flowing through walls.
And, somehow, lava stopped flowing entirely. I haven't begun playing with that yet.
EDIT: Err ... ???
In the nether, it suddenly had a spurt of flow at the load of the dimension, and then goes still.
EDIT 2: OK, for some reason, the nether went from "I have a hole dug by buckets that is just sitting there" to normal "too slow to be playable but flowing". Overworld, however, is just sitting there not flowing at all
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
So, there is a big issue with the speed of water/lava flow.
In vanilla, a source block flows, the child block gets a scheduled tick for the future, and some time later, it ticks and spreads again. Lava takes about 30 ticks to move a block. That's time to deal with opening a hole to exposed lava before it hits you.
Here? The code I'm working with will move lava very fast in the overworld, and even water seems to be a case of "I'll put water into the next block, and then update that block to move it more". I'm going to go to a two-phase system: instead of putting spreading water/lava into the destination, it's going to go into an "add-to" list. AFTER the chunk has updated fluid, THEN the fluids in the "Add-to" list are added to the destination blocks.
The other problem -- blocks get an update so many ticks after they first realize that they need an update -- unless I've missed something, your scheduling code (that I've inherited in the old version) assumes that all lava/water in the world updates on the same tick, and can't have different pieces updating on different ticks. Not sure what to do with that ...
What is the behavior of this in the re-write? Is lava flow as slow as vanilla? Do fluids still have the ability to move multiple blocks on a tick where they do move?
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
4Head, why did you not use the vanilla update scheduler, but instead wrote your own?
In order to get fluid to update at the same speed as vanilla, I need to track which tick a given block is going to update on (up to 5 ticks out for water, up to 30 ticks out for lava normally, or 10 ticks for lava in the nether -- found the code in BlockLiquid). That means not just having a list of blocks needing updates, but a list of blocks needing updates on a given tick.
Which is effectively re-writing most of the vanilla scheduled tick system. You choose not to use it; why? What problems will I run into? Or, have you already done this for the 2.0 version, and if so, what classes should I grab from that git?
===
Code theory/design: Since I'm looking at running a given water block only every 5th tick, I can handle 5 times as many ticks in the same amount of time. That means being able to handle all loaded chunks, instead of only chunks near a player. (NB: I'd like to include a distance limit as a last resort; I'm not sure what the overhead is of going through all the player entities for each chunk every tick to try to find a player close enough. I could probably make a delay if there wasn't a player in range in the last few ticks.)
So the cache changes; instead of saying "give me all the chunks for world X", and processing them, it's "chunk tick event; get the mappings of (tick number -> list of blocks needing update that tick) for the chunk, get all the keys that have a tick less than or equal to now, get all those lists of blocks combined into a single set (eliminates duplicates), and process them.
Which means that a chunk would also have a list of blocks that are already on some tick list, so that a block that has been updated isn't going to be added to another list, much like the current de-duplication guards.
But ... that means a guard set that has one entry per block in the world, rather than one entry per chunk in the world. ... I know hash sets are supposed to scale with the size of the collection with no big loss of performance, but this is going to be the biggest data structure I've had to work with.
... Need to break it down into a per-minichunk set. Or something. Or another array of booleans -- but that starts to consume a lot of memory as there will be an entry for every block, not just for the liquid blocks.
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
What do people consider the most important things to tackle first?
What do you want to see done next?
Solving the flow rate of water and lava requires a complete re-write of the scheduler. Note that this is probably required to make the Nether (or any Lava-ocean world) have decent performance.
I'd love to just use vanilla's scheduled tick system, but apparently it arbitrarily decides "too many, just ignore the rest". That's no good -- and I've seen some horrendous redstone contraptions that exploit this. Worse, this kills any significant "zero-tick" build -- they last worked properly in 125 single player, and have not worked properly since (random updates of redstone blocks, and limited amounts of blocks ticked in a tick.)
Solving the spread range, or getting a water trough to level and be smooth, requires a complete re-write of the viscosity and surface tension code. In any case, I can't really understand the current code.
Oceans have the potential for about 15 blocks of water, on average, per column; deep oceans about 22 (slightly less because of islands). That's about 4K blocks per chunk, or half a million blocks in full ocean territory for the chunks in a loaded world (at an average depth of 12 blocks, 8 chunk radius, that's over 880,000 blocks); even every 5th tick, that's still going to be 100,000 blocks per tick. There's supposed to be an optimization that avoid flowing water through the whole ocean depth, and just magically transfers from the surface down to the depth (if I didn't destroy it), but that still results in the entire surface flowing (about 74K blocks), plus the flow into whatever ravines/caves is down there will be as much as the displaced water. 100K blocks is a trivial estimate, which at every 5th tick would be 20K blocks per tick. That's well within what my code can handle on a good processor, but no where near what vanilla considers OK. So either I have to magically figure out more "optimizing" fluid pulls, or else redo the scheduled tick system, or else restrict flows somehow in the ocean.
I think I figured out the issue with lava flow -- I think I'm somehow queueing chunks that need to be examined in the wrong order, with the chunk with the delayed lava not getting processed until the queue empties out. This is consistent with my last testing -- as soon as the number of blocks being updated dropped below the 30K threshold, the lava moved. This is a "need to verify", and then figure out what I did wrong (I am supposed to be queueing chunks that need updating at the end of the current list, not at the beginning).
I still have no idea how to get RoC hydros to work. (They need the column to be non-zero meta data for the falling water, but a zero meta-data source block at the top of the column). Ideas welcome.
Relatively quickly, compared to all of this, is changing the flow out of a block from "choose a random direction, flow that way, flow less in the other directions" to a two-pass, "determine the total desired flow, and then scale based on what's available". But that would probably drop how many blocks can be done per-tick by at least 1/3rd.
A more complicated rainfall system, that has rain falling everywhere (instead of just oceans), with excess water being absorbed by the ground, isn't that hard to do. My concern is that it would make outdoor farming nearly impossible (crops being flooded) without serious irrigation channels to drain off the water -- that might be considered a good thing :-).
Then there's storing all the "in-progress" data -- all the blocks needing to be ticked, all the stored fluid levels -- in chunks as NBT data. That would seriously increase the size of saves (at a minimum, each block in a 16x16x16 grid with any fluid would gain 3 bytes of data in the store file -- or, a 16x64x16 ocean chunk would gain 50K, or 800 MB per region file. Now, it's not quite that bad -- the data is stored compressed, and all the zeroes would drop in size, but it still would be a LOT. In fairness, a given block already has 2 bytes for the block ID+metadata, and there's more data in there.) Realistically, I'd expect the size of the save to only double.
Finally, there's a goal of an erosion system :-). Someone else has decided to attempt that goal/fork for 1.10.2, but is first trying to get this to compile for 1.10.2.
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
i'm looking forward to the idea of rainfall and water buildup working everywhere with the chance of floods. i doubt many agree though... maybe a config for flooding or where one can adjust the evaporation speed. a flood doesn't have to be super destructive just something that would maybe fill an extra block higher or something. we play with the seasons mod so that would work really well with the increased rain chances of spring. also i would still love to see lava at a very high viscosity. it's way to fast except in the nether which ironically works great for us because of the slow speed.
as far as the mod is now though, it's top tier. water runs very fast as it should and other than some lag in places (mostly in swamp areas with BOP) we play with it enabled all the time even when exploring new chunks. i adore the rain and watching oceans fill and drain. sometimes building a trench and watching it fill a chasm. great stress relief that.
also off topic is their any way or mod that you know of to stop falling block from destroying tracks. i don't understand why blocks pop off of flowers but erase tracks. its reverse of what it should be ugh.
I would love to see this mod got a proper release. So I would suggest to prioritize the things absolutely urgent for releasing. More and more people start playing modded Minecraft 1.10, it would be a shame if that was a reason this mod would not get the attention it deserves.
if you are talking about erosion system.. like rocks, metals and other types.. I have checked out BetterGeo for 1.7.10. but there is another mod called "minecraft mineralogy" for 1.10.2 and its quite good one.. it has lot of types from rocks to metals.. you could see them on layer from bedrock to surface.. like what you would see a picture with earth's side (layer by layer) well its similar ideal.. it look nice. i hope you know what i am saying.
and also there is a mod called "stream"... it make a realistic river (where the water will flow all the way down) its a generation to change the system of few rivers with that mod (not every river)
both are quite realistic mod.. but it would nice to see this mod would go with these 2 mods.. making the game so fun! but i know it will take a lot of works to improve finite fluid mod and give it a full properly release
Water in the overworld should move pretty quickly. Are you seeing messages in the console about "can't keep up"?
How fast are you expecting the water to move / how fast is it moving? What exactly is your "wall of water" setup?
===
4Head: Looking over your 2.0 code, https://gitlab.com/oleduc/minecraft-finite-fluids-v2.0/blob/master/src/main/java/com/mcfht/rfo/RFOCommands.java, commands need to throw an exception when they fail. Look at the decompiled source for vanilla commands, for example. The issue that I know of is supporting command blocks that test for success/failure, there may be other issues as well (I have no clue how console commands on servers wind up working, for example).
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
Yes, I got this message: Can't keep up! Did the system time change, or is the server overloaded? Running 184901ms behind, skipping 3698 tick(s)
Well, I blew up a dam and after 30 minutes the water didn't move much. Kind of anticlimactic. I was hoping for 2 m/s...Is that possible?
That's 184 seconds behind ... yuck.
What did you do to your config file?
What CPU are you using?
===
The speed of flow depends on difference in water levels. If your source block is only slightly fuller than the neighbor, like a small river, it won't flow as fast as a solid wall -- which in testing collapses and falls and spreads quickly.
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
Then all 3 will be ignored
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
1.7.10 refers to the release 1.7.10, not the beta one, right? Probably a stupid question, but...
Also, seeing that this has been in development for 2 years, how close are you to a full release? I remember for about a year going back to djoslin's page every day to see if there was an update before finally seeing that it was dead. I want to make sure that doesn't happen again.
Keybounce - the maintainer of the legacy codebase - just made a comment on 4HT's code in 2.0 two days ago - you can be safely assured that the mod is still being worked on in some capacity.
ETA is likely anybody's guess, a lot of developers find it rude and annoying when people ask such things (because it's impossible to say, and any work spent in estimating a release time would take away actual development time. In other words, the answer is almost always "when it's ready" up until the final stretch).
The big difference between 4Head's and mine is that he is focusing on full threading, while I am focusing on getting mod compatibility and a rainfall cycle. Chances are that 4Head will take most of what I do and incorporate it.
Right now, for example, I need to figure out a way to get RoC Hydro's working. The entire block 8/9 distinction in RFO is NOT the same as the vanilla distinction -- vanilla uses 8 (flowing) for "the state of this block and neighbor flow is changing", and meta-data values are used for source vs flowing. (RFO uses 8 for not-full, 9 for full, as well as meta-data for volume). Hydro's want non-zero meta-data for "falling" water, with a zero meta-data "source" block at the top. But if I have a solid column of falling water, every block is "full", so has a zero meta-data even if falling.
While I have an "easy" fix to mark falling blocks -- and I should do that just for compatibility -- figuring out how to make the top of the column "0" (not falling) instead of "8" (falling) remains undetermined.
The rest?
I want to take all of the updates out of "server tick" and put them into "dimension tick" -- /forge tps does not report accurate numbers right now.
I want to separate completely -- two separate lists -- the water and lava update lists, *per dimension*. The issue here is the need for lava blocks to re-queue themselves all the time, with the nether being a performance disaster as a result.
But both of those make the "per-run limit" hard to enforce. On the other hand, if I can make it work, then I can flow water over *the entire world*, rather than just near players. (Think machines that will continue to work properly if loaded, even if a player is not nearby).
And, I want to make lava in the nether flow the same as water in the overworld -- that's pretty much how vanilla nether lava flows. This requires more settings.
Meanwhile, I took a look at 4Head's command system, and I'll probably grab most of that -- his system results in commands updating the config file automatically. That works perfectly on servers, and single-player systems where there is only one world per profile. Things fail if you have more than one world/save per single-player profile (All worlds will have identical settings).
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
Sorry. I wasn't really looking for a time estimate, but more of a 'We've got about half of the features we want to add coded in' kind of thing. Also my computer is lagging badly when I use a browser of any kind, yet it runs minecraft decently O.o
Also I just realized I'm not using the same account; I'm the one who asked how far in develoment the mod was up above
I tried increasing the values to see if that would make it faster, which it didn't. I have an i7-3630QM CPU and 8 gb of ram. What specific values should I change in the config to make the water faster?
Looking over the config file, I see the following:
These three will be the biggest effect. If Near is turned on, then fluid in that range will be flowed every time the server checks, regardless of how much it slows the server down. The globalFarUpdates is what you adjust if you are getting warnings about too many fluid blocks and a server slowdown. The update range far is what you adjust if you want fast response of fewer blocks.
So, if you can handle 30,000 blocks without slowdown, and it turns out that Far has to be down to 3 to run under that count, then you have that as your settings.
I believe (I have not played with this code yet) that this says, "Try to process every tick, but if you are slowing the system, drop down as low as every 10 ticks".
For water, I think it will try to flow every tick if you ask it to (lava flows slower).
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
Vanilla calibration, tested by counting frames at 30 fps in a video recorder.
Water flows every 7.5 frames, or 5 ticks. Not 4. (Alternated 7 frames, 8 frames.)
Lava flows every 30 ticks approximately. Got frame rates of 42, 45, and 49. Calling that 45 frames average, or 30 ticks.
Next step: See if I can adjust the flow rates to match that.
EDIT: Wow. Lava decay (flow cut off by piston) was 46 frames for the first space, 61 frames for the second space (the little height 1 sliver).
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
do anyone (EXCEPT the author) know if there is any plans for this mod in future? i am sure you would know what i mean by that.
I would like to use this mod in server with other friends.. and this would make the world of minecraft quite realistic.
aaggggghhhh....
Well, I have a version with diagonal flow disabled. No more flowing through walls.
And, somehow, lava stopped flowing entirely. I haven't begun playing with that yet.
EDIT: Err ... ???
In the nether, it suddenly had a spurt of flow at the load of the dimension, and then goes still.
EDIT 2: OK, for some reason, the nether went from "I have a hole dug by buckets that is just sitting there" to normal "too slow to be playable but flowing". Overworld, however, is just sitting there not flowing at all
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
So, there is a big issue with the speed of water/lava flow.
In vanilla, a source block flows, the child block gets a scheduled tick for the future, and some time later, it ticks and spreads again. Lava takes about 30 ticks to move a block. That's time to deal with opening a hole to exposed lava before it hits you.
Here? The code I'm working with will move lava very fast in the overworld, and even water seems to be a case of "I'll put water into the next block, and then update that block to move it more". I'm going to go to a two-phase system: instead of putting spreading water/lava into the destination, it's going to go into an "add-to" list. AFTER the chunk has updated fluid, THEN the fluids in the "Add-to" list are added to the destination blocks.
The other problem -- blocks get an update so many ticks after they first realize that they need an update -- unless I've missed something, your scheduling code (that I've inherited in the old version) assumes that all lava/water in the world updates on the same tick, and can't have different pieces updating on different ticks. Not sure what to do with that ...
What is the behavior of this in the re-write? Is lava flow as slow as vanilla? Do fluids still have the ability to move multiple blocks on a tick where they do move?
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
... confirmed that water wants to move 20 times a second, every tick, not every few ticks.
...
Not sure if the original did that, or if I messed something up in my playing with it.
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
4Head, why did you not use the vanilla update scheduler, but instead wrote your own?
In order to get fluid to update at the same speed as vanilla, I need to track which tick a given block is going to update on (up to 5 ticks out for water, up to 30 ticks out for lava normally, or 10 ticks for lava in the nether -- found the code in BlockLiquid). That means not just having a list of blocks needing updates, but a list of blocks needing updates on a given tick.
Which is effectively re-writing most of the vanilla scheduled tick system. You choose not to use it; why? What problems will I run into? Or, have you already done this for the 2.0 version, and if so, what classes should I grab from that git?
===
Code theory/design: Since I'm looking at running a given water block only every 5th tick, I can handle 5 times as many ticks in the same amount of time. That means being able to handle all loaded chunks, instead of only chunks near a player. (NB: I'd like to include a distance limit as a last resort; I'm not sure what the overhead is of going through all the player entities for each chunk every tick to try to find a player close enough. I could probably make a delay if there wasn't a player in range in the last few ticks.)
So the cache changes; instead of saying "give me all the chunks for world X", and processing them, it's "chunk tick event; get the mappings of (tick number -> list of blocks needing update that tick) for the chunk, get all the keys that have a tick less than or equal to now, get all those lists of blocks combined into a single set (eliminates duplicates), and process them.
Which means that a chunk would also have a list of blocks that are already on some tick list, so that a block that has been updated isn't going to be added to another list, much like the current de-duplication guards.
But ... that means a guard set that has one entry per block in the world, rather than one entry per chunk in the world. ... I know hash sets are supposed to scale with the size of the collection with no big loss of performance, but this is going to be the biggest data structure I've had to work with.
... Need to break it down into a per-minichunk set. Or something. Or another array of booleans -- but that starts to consume a lot of memory as there will be an entry for every block, not just for the liquid blocks.
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
What do people consider the most important things to tackle first?
What do you want to see done next?
Solving the flow rate of water and lava requires a complete re-write of the scheduler. Note that this is probably required to make the Nether (or any Lava-ocean world) have decent performance.
I'd love to just use vanilla's scheduled tick system, but apparently it arbitrarily decides "too many, just ignore the rest". That's no good -- and I've seen some horrendous redstone contraptions that exploit this. Worse, this kills any significant "zero-tick" build -- they last worked properly in 125 single player, and have not worked properly since (random updates of redstone blocks, and limited amounts of blocks ticked in a tick.)
Solving the spread range, or getting a water trough to level and be smooth, requires a complete re-write of the viscosity and surface tension code. In any case, I can't really understand the current code.
Oceans have the potential for about 15 blocks of water, on average, per column; deep oceans about 22 (slightly less because of islands). That's about 4K blocks per chunk, or half a million blocks in full ocean territory for the chunks in a loaded world (at an average depth of 12 blocks, 8 chunk radius, that's over 880,000 blocks); even every 5th tick, that's still going to be 100,000 blocks per tick. There's supposed to be an optimization that avoid flowing water through the whole ocean depth, and just magically transfers from the surface down to the depth (if I didn't destroy it), but that still results in the entire surface flowing (about 74K blocks), plus the flow into whatever ravines/caves is down there will be as much as the displaced water. 100K blocks is a trivial estimate, which at every 5th tick would be 20K blocks per tick. That's well within what my code can handle on a good processor, but no where near what vanilla considers OK. So either I have to magically figure out more "optimizing" fluid pulls, or else redo the scheduled tick system, or else restrict flows somehow in the ocean.
I think I figured out the issue with lava flow -- I think I'm somehow queueing chunks that need to be examined in the wrong order, with the chunk with the delayed lava not getting processed until the queue empties out. This is consistent with my last testing -- as soon as the number of blocks being updated dropped below the 30K threshold, the lava moved. This is a "need to verify", and then figure out what I did wrong (I am supposed to be queueing chunks that need updating at the end of the current list, not at the beginning).
I still have no idea how to get RoC hydros to work. (They need the column to be non-zero meta data for the falling water, but a zero meta-data source block at the top of the column). Ideas welcome.
Relatively quickly, compared to all of this, is changing the flow out of a block from "choose a random direction, flow that way, flow less in the other directions" to a two-pass, "determine the total desired flow, and then scale based on what's available". But that would probably drop how many blocks can be done per-tick by at least 1/3rd.
A more complicated rainfall system, that has rain falling everywhere (instead of just oceans), with excess water being absorbed by the ground, isn't that hard to do. My concern is that it would make outdoor farming nearly impossible (crops being flooded) without serious irrigation channels to drain off the water -- that might be considered a good thing :-).
Then there's storing all the "in-progress" data -- all the blocks needing to be ticked, all the stored fluid levels -- in chunks as NBT data. That would seriously increase the size of saves (at a minimum, each block in a 16x16x16 grid with any fluid would gain 3 bytes of data in the store file -- or, a 16x64x16 ocean chunk would gain 50K, or 800 MB per region file. Now, it's not quite that bad -- the data is stored compressed, and all the zeroes would drop in size, but it still would be a LOT. In fairness, a given block already has 2 bytes for the block ID+metadata, and there's more data in there.) Realistically, I'd expect the size of the save to only double.
Finally, there's a goal of an erosion system :-). Someone else has decided to attempt that goal/fork for 1.10.2, but is first trying to get this to compile for 1.10.2.
So what would people like to see next?
* Promoting this week: Captive Minecraft 4, Winter Realm. Aka: Vertical Vanilla Viewing. Clicky!
* My channel with Mystcraft, and general Minecraft Let's Plays: http://www.youtube.com/user/Keybounce.
* See all my video series: http://www.minecraftforum.net/forums/minecraft-editions/minecraft-editions-show-your/2865421-keybounces-list-of-creation-threads
(In regard to a mod that gives realistic animal genetics):
Would you really rather have bees that make diamonds and oil with magical genetic blocks?
... did I really ask that?
i'm looking forward to the idea of rainfall and water buildup working everywhere with the chance of floods. i doubt many agree though... maybe a config for flooding or where one can adjust the evaporation speed. a flood doesn't have to be super destructive just something that would maybe fill an extra block higher or something. we play with the seasons mod so that would work really well with the increased rain chances of spring. also i would still love to see lava at a very high viscosity. it's way to fast except in the nether which ironically works great for us because of the slow speed.
as far as the mod is now though, it's top tier. water runs very fast as it should and other than some lag in places (mostly in swamp areas with BOP) we play with it enabled all the time even when exploring new chunks. i adore the rain and watching oceans fill and drain. sometimes building a trench and watching it fill a chasm. great stress relief that.
also off topic is their any way or mod that you know of to stop falling block from destroying tracks. i don't understand why blocks pop off of flowers but erase tracks. its reverse of what it should be ugh.
if you are talking about erosion system.. like rocks, metals and other types.. I have checked out BetterGeo for 1.7.10. but there is another mod called "minecraft mineralogy" for 1.10.2 and its quite good one.. it has lot of types from rocks to metals.. you could see them on layer from bedrock to surface.. like what you would see a picture with earth's side (layer by layer) well its similar ideal.. it look nice. i hope you know what i am saying.
and also there is a mod called "stream"... it make a realistic river (where the water will flow all the way down) its a generation to change the system of few rivers with that mod (not every river)
both are quite realistic mod.. but it would nice to see this mod would go with these 2 mods.. making the game so fun! but i know it will take a lot of works to improve finite fluid mod and give it a full properly release