From f1e63c12fda4ba8a5792b7e8b63d7b17372e7a70 Mon Sep 17 00:00:00 2001
From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>
Date: Thu, 24 Aug 2023 18:35:41 +0800
Subject: Add interact lever check

---
 .../skyblocker/skyblock/dungeon/secrets/Room.java       | 11 ++++++-----
 .../skyblock/dungeon/secrets/SecretWaypoint.java        | 17 ++++++++++++-----
 2 files changed, 18 insertions(+), 10 deletions(-)

(limited to 'src')

diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java
index 3f69fca8..8e8fb767 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java
@@ -363,11 +363,12 @@ public class Room {
      */
     protected void onUseBlock(World world, BlockHitResult hitResult) {
         BlockState state = world.getBlockState(hitResult.getBlockPos());
-        if (!state.isOf(Blocks.CHEST) && !state.isOf(Blocks.PLAYER_HEAD) && !state.isOf(Blocks.PLAYER_WALL_HEAD)) {
-            return;
+        if (state.isOf(Blocks.CHEST) || state.isOf(Blocks.PLAYER_HEAD) || state.isOf(Blocks.PLAYER_WALL_HEAD)) {
+            secretWaypoints.column(hitResult.getBlockPos()).values().stream().filter(SecretWaypoint::needsInteraction).findAny()
+                    .ifPresent(secretWaypoint -> onSecretFound(secretWaypoint, "[Skyblocker] Detected {} interaction, setting secret #{} as found", secretWaypoint.category, secretWaypoint.secretIndex));
+        } else if (state.isOf(Blocks.LEVER)) {
+            secretWaypoints.column(hitResult.getBlockPos()).values().stream().filter(SecretWaypoint::isLever).forEach(SecretWaypoint::setFound);
         }
-        secretWaypoints.column(hitResult.getBlockPos()).values().stream().filter(SecretWaypoint::needsInteraction).findAny()
-                .ifPresent(secretWaypoint -> onSecretFound(secretWaypoint, "[Skyblocker] Detected {} interaction, setting secret #{} as found", secretWaypoint.category, secretWaypoint.secretIndex));
     }
 
     /**
@@ -398,7 +399,7 @@ public class Room {
     }
 
     protected void markSecrets(int secretIndex, boolean found) {
-        secretWaypoints.row(secretIndex).values().forEach(SecretWaypoint.getStatusSetter(found));
+        secretWaypoints.row(secretIndex).values().forEach(found ? SecretWaypoint::setFound : SecretWaypoint::setMissing);
     }
 
     public enum Type {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
index e44f2ebe..c2658fd3 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
@@ -12,7 +12,6 @@ import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.Vec3d;
 
 import java.util.List;
-import java.util.function.Consumer;
 import java.util.function.Predicate;
 import java.util.function.ToDoubleFunction;
 
@@ -42,10 +41,6 @@ public class SecretWaypoint {
         return secretWaypoint -> entity.squaredDistanceTo(secretWaypoint.centerPos) <= 36D;
     }
 
-    static Consumer<SecretWaypoint> getStatusSetter(boolean found) {
-        return secretWaypoint -> secretWaypoint.missing = !found;
-    }
-
     boolean shouldRender() {
         return category.isEnabled() && missing;
     }
@@ -54,6 +49,10 @@ public class SecretWaypoint {
         return category.needsInteraction();
     }
 
+    boolean isLever() {
+        return category.isLever();
+    }
+
     boolean needsItemPickup() {
         return category.needsItemPickup();
     }
@@ -62,6 +61,10 @@ public class SecretWaypoint {
         this.missing = false;
     }
 
+    void setMissing() {
+        this.missing = true;
+    }
+
     /**
      * Renders the secret waypoint, including a filled cube, a beacon beam, the name, and the distance from the player.
      */
@@ -114,6 +117,10 @@ public class SecretWaypoint {
             return this == CHEST || this == WITHER;
         }
 
+        boolean isLever() {
+            return this == LEVER;
+        }
+
         boolean needsItemPickup() {
             return this == ITEM || this == BAT;
         }
-- 
cgit