Merge pull request #3296 from ZacSharp/findImprovements
Find improvements
This commit is contained in:
commit
49828baae3
@ -22,14 +22,23 @@ import baritone.api.command.Command;
|
|||||||
import baritone.api.command.argument.IArgConsumer;
|
import baritone.api.command.argument.IArgConsumer;
|
||||||
import baritone.api.command.datatypes.BlockById;
|
import baritone.api.command.datatypes.BlockById;
|
||||||
import baritone.api.command.exception.CommandException;
|
import baritone.api.command.exception.CommandException;
|
||||||
|
import baritone.api.command.helpers.TabCompleteHelper;
|
||||||
import baritone.api.utils.BetterBlockPos;
|
import baritone.api.utils.BetterBlockPos;
|
||||||
|
import baritone.cache.CachedChunk;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.util.text.ITextComponent;
|
||||||
|
import net.minecraft.util.text.TextComponentString;
|
||||||
|
import net.minecraft.util.text.TextFormatting;
|
||||||
|
import net.minecraft.util.text.event.ClickEvent;
|
||||||
|
import net.minecraft.util.text.event.HoverEvent;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static baritone.api.command.IBaritoneChatControl.FORCE_COMMAND_PREFIX;
|
||||||
|
|
||||||
public class FindCommand extends Command {
|
public class FindCommand extends Command {
|
||||||
|
|
||||||
public FindCommand(IBaritone baritone) {
|
public FindCommand(IBaritone baritone) {
|
||||||
@ -38,12 +47,13 @@ public class FindCommand extends Command {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(String label, IArgConsumer args) throws CommandException {
|
public void execute(String label, IArgConsumer args) throws CommandException {
|
||||||
|
args.requireMin(1);
|
||||||
List<Block> toFind = new ArrayList<>();
|
List<Block> toFind = new ArrayList<>();
|
||||||
while (args.hasAny()) {
|
while (args.hasAny()) {
|
||||||
toFind.add(args.getDatatypeFor(BlockById.INSTANCE));
|
toFind.add(args.getDatatypeFor(BlockById.INSTANCE));
|
||||||
}
|
}
|
||||||
BetterBlockPos origin = ctx.playerFeet();
|
BetterBlockPos origin = ctx.playerFeet();
|
||||||
toFind.stream()
|
ITextComponent[] components = toFind.stream()
|
||||||
.flatMap(block ->
|
.flatMap(block ->
|
||||||
ctx.worldData().getCachedWorld().getLocationsOf(
|
ctx.worldData().getCachedWorld().getLocationsOf(
|
||||||
Block.REGISTRY.getNameForObject(block).getPath(),
|
Block.REGISTRY.getNameForObject(block).getPath(),
|
||||||
@ -54,13 +64,39 @@ public class FindCommand extends Command {
|
|||||||
).stream()
|
).stream()
|
||||||
)
|
)
|
||||||
.map(BetterBlockPos::new)
|
.map(BetterBlockPos::new)
|
||||||
.map(BetterBlockPos::toString)
|
.map(this::positionToComponent)
|
||||||
.forEach(this::logDirect);
|
.toArray(ITextComponent[]::new);
|
||||||
|
if (components.length > 0) {
|
||||||
|
Arrays.asList(components).forEach(this::logDirect);
|
||||||
|
} else {
|
||||||
|
logDirect("No positions known, are you sure the blocks are cached?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ITextComponent positionToComponent(BetterBlockPos pos) {
|
||||||
|
String positionText = String.format("%s %s %s", pos.x, pos.y, pos.z);
|
||||||
|
String command = String.format("%sgoal %s", FORCE_COMMAND_PREFIX, positionText);
|
||||||
|
ITextComponent baseComponent = new TextComponentString(pos.toString());
|
||||||
|
ITextComponent hoverComponent = new TextComponentString("Click to set goal to this position");
|
||||||
|
baseComponent.getStyle()
|
||||||
|
.setColor(TextFormatting.GRAY)
|
||||||
|
.setInsertion(positionText)
|
||||||
|
.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, command))
|
||||||
|
.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent));
|
||||||
|
return baseComponent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<String> tabComplete(String label, IArgConsumer args) {
|
public Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException {
|
||||||
return args.tabCompleteDatatype(BlockById.INSTANCE);
|
return new TabCompleteHelper()
|
||||||
|
.append(
|
||||||
|
CachedChunk.BLOCKS_TO_KEEP_TRACK_OF.stream()
|
||||||
|
.map(Block.REGISTRY::getNameForObject)
|
||||||
|
.map(Object::toString)
|
||||||
|
)
|
||||||
|
.filterPrefixNamespaced(args.getString())
|
||||||
|
.sortAlphabetically()
|
||||||
|
.stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -72,9 +108,10 @@ public class FindCommand extends Command {
|
|||||||
public List<String> getLongDesc() {
|
public List<String> getLongDesc() {
|
||||||
return Arrays.asList(
|
return Arrays.asList(
|
||||||
"The find command searches through Baritone's cache and attempts to find the location of the block.",
|
"The find command searches through Baritone's cache and attempts to find the location of the block.",
|
||||||
|
"Tab completion will suggest only cached blocks and uncached blocks can not be found.",
|
||||||
"",
|
"",
|
||||||
"Usage:",
|
"Usage:",
|
||||||
"> find <block> - Find positions of a certain block"
|
"> find <block> [...] - Try finding the listed blocks"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user