From 3ce764a472c97876ff0a9fb717c354526402dc49 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Thu, 23 Aug 2018 09:54:29 -0700 Subject: [PATCH] waypoint convenience methods --- src/main/java/baritone/chunk/Waypoint.java | 26 ++++++++-- .../utils/ExampleBaritoneControl.java | 52 +++++++++++++++++-- 2 files changed, 69 insertions(+), 9 deletions(-) diff --git a/src/main/java/baritone/chunk/Waypoint.java b/src/main/java/baritone/chunk/Waypoint.java index d834ee2c..cb2adbc8 100644 --- a/src/main/java/baritone/chunk/Waypoint.java +++ b/src/main/java/baritone/chunk/Waypoint.java @@ -19,6 +19,8 @@ package baritone.chunk; import net.minecraft.util.math.BlockPos; +import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -61,14 +63,28 @@ public class Waypoint { return name.hashCode() + tag.hashCode() + (int) creationTimestamp + location.hashCode(); //lol } + public long creationTimestamp() { + return creationTimestamp; + } + + public String toString() { + return name + " " + location.toString() + " " + new Date(creationTimestamp).toString(); + } + public enum Tag { HOME, DEATH, BED, USER; - { - map.put(name().toLowerCase(), this); - } - } - private static final Map map = new HashMap<>(); + public static final Map TAG_MAP; + + static { + HashMap map = new HashMap<>(); + map.put("home", Tag.HOME); + map.put("base", Tag.HOME); + map.put("bed", Tag.BED); + map.put("spawn", Tag.BED); + map.put("death", Tag.DEATH); + TAG_MAP = Collections.unmodifiableMap(map); + } } diff --git a/src/main/java/baritone/utils/ExampleBaritoneControl.java b/src/main/java/baritone/utils/ExampleBaritoneControl.java index fae6a4d8..7d62fdaa 100644 --- a/src/main/java/baritone/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/utils/ExampleBaritoneControl.java @@ -35,10 +35,7 @@ import baritone.pathing.movement.Movement; import baritone.utils.pathing.BetterBlockPos; import net.minecraft.util.math.BlockPos; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; +import java.util.*; public class ExampleBaritoneControl extends Behavior { public static ExampleBaritoneControl INSTANCE = new ExampleBaritoneControl(); @@ -115,6 +112,53 @@ public class ExampleBaritoneControl extends Behavior { event.cancel(); return; } + if (msg.toLowerCase().startsWith("list") || msg.toLowerCase().startsWith("get ") || msg.toLowerCase().startsWith("show")) { + String waypointType = msg.toLowerCase().substring(4).trim(); + if (waypointType.endsWith("s")) { + // for example, "show deaths" + waypointType = waypointType.substring(0, waypointType.length() - 1); + } + Waypoint.Tag tag = Waypoint.TAG_MAP.get(waypointType); + if (tag == null) { + displayChatMessageRaw("Not a valid tag. Tags are: " + Arrays.asList(Waypoint.Tag.values()).toString().toLowerCase()); + event.cancel(); + return; + } + Set waypoints = WorldProvider.INSTANCE.getCurrentWorld().waypoints.getByTag(tag); + // might as well show them from oldest to newest + List sorted = new ArrayList<>(waypoints); + sorted.sort(Comparator.comparingLong(Waypoint::creationTimestamp).reversed()); + displayChatMessageRaw("Waypoints under tag " + tag + ":"); + for (Waypoint waypoint : sorted) { + displayChatMessageRaw(waypoint.toString()); + } + event.cancel(); + return; + } + if (msg.toLowerCase().startsWith("goto")) { + String waypointType = msg.toLowerCase().substring(4).trim(); + if (waypointType.endsWith("s")) { + // for example, "show deaths" + waypointType = waypointType.substring(0, waypointType.length() - 1); + } + Waypoint.Tag tag = Waypoint.TAG_MAP.get(waypointType); + if (tag == null) { + displayChatMessageRaw("Not a valid tag. Tags are: " + Arrays.asList(Waypoint.Tag.values()).toString().toLowerCase()); + event.cancel(); + return; + } + Waypoint waypoint = WorldProvider.INSTANCE.getCurrentWorld().waypoints.getMostRecentByTag(tag); + if (waypoint == null) { + displayChatMessageRaw("None saved for tag " + tag); + event.cancel(); + return; + } + Goal goal = new GoalBlock(waypoint.location); + PathingBehavior.INSTANCE.setGoal(goal); + PathingBehavior.INSTANCE.path(); + event.cancel(); + return; + } if (msg.toLowerCase().equals("spawn") || msg.toLowerCase().equals("bed")) { Waypoint waypoint = WorldProvider.INSTANCE.getCurrentWorld().waypoints.getMostRecentByTag(Waypoint.Tag.BED); if (waypoint == null) {