From d03d158f8ca40572560f78285e646d4bb3b28d8e Mon Sep 17 00:00:00 2001 From: olim Date: Thu, 20 Jun 2024 15:18:55 +0100 Subject: make sure the location guess is sensible make sure its within 100 blocks of the players zone --- .../skyblocker/skyblock/dwarven/WishingCompassSolver.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/WishingCompassSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/WishingCompassSolver.java index 7ba2e05a..ce1fdf55 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/WishingCompassSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/WishingCompassSolver.java @@ -169,6 +169,15 @@ public class WishingCompassSolver { }; } + /** + * Verify that a location could be correct and not to far out of zone. This is a problem when areas sometimes do not exist and is not a perfect solution + * @param startingZone zone player is searching in + * @param pos location where the area should be + * @return corrected location + */ + private static Boolean verifyLocation(ZONE startingZone, Vec3d pos) { + return ZONE_BOUNDING_BOXES.get(startingZone).expand(100, 0, 100).contains(pos); + } public static void onParticle(ParticleS2CPacket packet) { if (!Utils.isInCrystalHollows() || !ParticleTypes.HAPPY_VILLAGER.equals(packet.getParameters().getType())) { @@ -216,7 +225,11 @@ public class WishingCompassSolver { CLIENT.player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.mining.crystalsWaypoints.wishingCompassSolver.somethingWentWrongMessage").formatted(Formatting.RED)), false); } else { //send message to player with location and name - MiningLocationLabel.CrystalHollowsLocationsCategory location = getTargetLocation(getZoneOfLocation(startPosOne)); + ZONE playerZone = getZoneOfLocation(startPosOne); + MiningLocationLabel.CrystalHollowsLocationsCategory location = getTargetLocation(playerZone); + if (!verifyLocation(playerZone, targetLocation)) { + location = MiningLocationLabel.CrystalHollowsLocationsCategory.UNKNOWN; + } //offset the jungle location to its doors if (location == MiningLocationLabel.CrystalHollowsLocationsCategory.JUNGLE_TEMPLE) { targetLocation = targetLocation.add(JUNGLE_TEMPLE_DOOR_OFFSET); -- cgit