cabaletta / baritone

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

Mine by Priority #3844

Open CaryCatZ opened 1 year ago

CaryCatZ commented 1 year ago

Mine things by priority

Find the main target to mine and only mine other targets when they are near.

Settings

Set priorities in the order of the arguments.

Context

For example, I want diamonds and some iron ores. The diamond is the main target, the iron is secondary. So I would like baritone to find and mine diamonds mainly and only mine iron ores when there are iron ores near.

Final checklist

wagyourtail commented 1 year ago

the problem with solving this is nailing down a specific weighting between priority and distance

ZacSharp commented 1 year ago

I think users requesting this expect something like "If there happens to be a secondary ore and the detour from the original path is small compared to the length of the path, then go for it." The original bit is important, because it prevents chaining small detours without ever reaching the actual target.

Implementation wise I think we could probably either do it by keeping the original path around to measure distances from it, or by forcing Baritone towards primary ores by only considering secondary ores if they are closer (i.e. lower heuristic) than the closest-so-far player position. JankyGoalComposite does distinguish between primary and secondary goals already, so that's also an option (I don't think it's much more janky than the other options)

There's also a bunch of ways to more or less approximate "double prio is treated as if it always took half the actual time", but I'm not sure whether any of those (including actual approximation free weighted paths) would fit this issue, because they have this chaining problem so it can take ages to get close enough to a primary ore (for #3812 that's the way to go though.)

This is probably a duplicate of #3742 (which specifically requests a solution prone to secondary ore chaining, but ok)