cabaletta / baritone

google maps for block game
GNU Lesser General Public License v3.0
7.3k stars 1.46k forks source link

skipblocks function #4480

Closed Barrybeeebenson closed 2 months ago

Barrybeeebenson commented 3 months ago

#skipblocks function. (you can change the name of it to your liking)

this would be a schematic building function that is mainly meant for buildinlayers true.

the skipblocks function would allow you to skip building the next desired amount of blocks.

example: "#skipblocks 50" would tell baritone that the next 50 blocks are completed

Settings

the suffix "partial" after the block value means it will have baritone only skip updating those blocks if they get broken or misplaced. example: "skipblocks 50 partial" would mean that baritone would still build those 50 blocks like normal, but it would skip replacing those if they were broken. (see functionality details in next section)

Context

the functionality would be for those who are building massive schematics, but there are mountians nearby. usually we would be able to avoid bombing the mountain by simply using "buildignoreexisting" which does help, however inside those mountains are caves which baritone sees as available places to build, so baritone digs through the mountain to place a few blocks, then returns, leaving behind a tunnel that baritone will also as an available place to build, causing a loop.

this setting would fix this issue, because when encountering a cave system inside a mountain you could simply use freecam to count roughly how many blocks of cave there are for that layer, and use "#skipblocks" 30 or however many is needed, and baritone would just skip those blocks, marking it as complete.

i see applications for this being used for my project, along with some others, and its an important feature to add in my opinion.

Final checklist

ZacSharp commented 3 months ago

Baritone doesn't even know which block will be the next to be placed until it actually places the block so skipping "the next 50 blocks to be placed" in the way you want to use it would require simulating all of Baritones behavior for the next 50 placements. That's technically possible but way too much effort.

Barrybeeebenson commented 2 months ago

Alright, also I appreciate your reply. However cave systems still are an issue when building wall like structures (with buildignoreexisting on) for long periods of time, baritone gets stuck in a loop. For my project it is extremely bothering, but understandably it's a rather uncommon issue people face; it probably won't be fixed for a long time or ever.

Here's the issue once again, in case one day you want a side project to work on (fixing this issue).

When a schematic which is long in length, short in width, and tall in height, is commanded to baritone to be built, usually if buildinlayers is true and there is no block interference, everything is fine. And with the same conditions, if there comes a stray block that you don't want baritone breaking, or if somethings in the way, buildignoreexisting is the fix. until you come across a big mountain.

Usually if there is block interference when you have buildignoreexisting set to true, baritone simple IGNORES the already existing blocks, regardless of what they are. But when you come across a big mountain and think buildignoreexisting is going to prevent any issues from occuring, you get slapped with the reality that there are cave systems inside the mountain.

These cave systems are considered air, or empty space for baritone. So it tries to fill it in, causing you to mine directly into the mountain,and place a few blocks, then leave (which also leaves behind a large tunnel that baritone will also try to replace)

I thought adding disallow breaking to true would help; it didn't and made baritone contemplate it's life (sit there and do nothing indefinitely)

So ultimately the problem boils down to this. Baritones buildignoreexisting setting does not work with schematics that have a wall like structures when mountains are near. This is because there are cave systems in the mountains that cause baritone to think there is placeable locations, leading to baritone tunneling into the mountain all to place a few blocks, then return to the other side, which ultimately leaves a tunnel that it will have to fill later anyways.

Have a nice day, -barry

On Wed, Aug 28, 2024, 4:56 AM ZacSharp @.***> wrote:

Baritone doesn't even know which block will be the next to be placed until it actually places the block so skipping "the next 50 blocks to be placed" in the way you want to use it would require simulating all of Baritones behavior for the next 50 placements. That's technically possible but way too much effort.

— Reply to this email directly, view it on GitHub https://github.com/cabaletta/baritone/issues/4480#issuecomment-2315124211, or unsubscribe https://github.com/notifications/unsubscribe-auth/A4H5QK5IMZ5DXK3YFLWKSZ3ZTW3FNAVCNFSM6AAAAABM2QSO2OVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMJVGEZDIMRRGE . You are receiving this because you authored the thread.Message ID: @.***>

ZacSharp commented 2 months ago

You might have some luck with buildOnlySelection, though I have to admit selecting parts to exclude rather than include would fit your case better. And if you select a cave by accident you'll probably have to redo the entire selection...