/* * This file is part of Baritone. * * Baritone is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Baritone is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Baritone. If not, see . */ package baritone.api.command.datatypes; import baritone.api.IBaritone; import baritone.api.cache.IWaypoint; import baritone.api.cache.IWaypointCollection; import baritone.api.command.exception.CommandException; import baritone.api.command.helpers.TabCompleteHelper; import java.util.Comparator; import java.util.stream.Stream; public enum ForWaypoints implements IDatatypeFor { INSTANCE; @Override public IWaypoint[] get(IDatatypeContext ctx) throws CommandException { final String input = ctx.getConsumer().getString(); final IWaypoint.Tag tag = IWaypoint.Tag.getByName(input); // If the input doesn't resolve to a valid tag, resolve by name return tag == null ? getWaypointsByName(ctx.getBaritone(), input) : getWaypointsByTag(ctx.getBaritone(), tag); } @Override public Stream tabComplete(IDatatypeContext ctx) throws CommandException { return new TabCompleteHelper() .append(getWaypointNames(ctx.getBaritone())) .sortAlphabetically() .prepend(IWaypoint.Tag.getAllNames()) .filterPrefix(ctx.getConsumer().getString()) .stream(); } public static IWaypointCollection waypoints(IBaritone baritone) { return baritone.getWorldProvider().getCurrentWorld().getWaypoints(); } public static IWaypoint[] getWaypoints(IBaritone baritone) { return waypoints(baritone).getAllWaypoints().stream() .sorted(Comparator.comparingLong(IWaypoint::getCreationTimestamp).reversed()) .toArray(IWaypoint[]::new); } public static String[] getWaypointNames(IBaritone baritone) { return Stream.of(getWaypoints(baritone)) .map(IWaypoint::getName) .filter(name -> !name.isEmpty()) .toArray(String[]::new); } public static IWaypoint[] getWaypointsByTag(IBaritone baritone, IWaypoint.Tag tag) { return waypoints(baritone).getByTag(tag).stream() .sorted(Comparator.comparingLong(IWaypoint::getCreationTimestamp).reversed()) .toArray(IWaypoint[]::new); } public static IWaypoint[] getWaypointsByName(IBaritone baritone, String name) { return Stream.of(getWaypoints(baritone)) .filter(waypoint -> waypoint.getName().equalsIgnoreCase(name)) .toArray(IWaypoint[]::new); } }