aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-01-01 14:50:01 +0800
committerGitHub <noreply@github.com>2024-01-01 01:50:01 -0500
commit37eb5bfad25b1e0c3326ed27744c38f81513b5e4 (patch)
treef218b51ff9fe54597f7126115547fb15f12bbb4e /src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets
parent8005dd9afe963a461619ee3da603d8202292840b (diff)
downloadSkyblocker-37eb5bfad25b1e0c3326ed27744c38f81513b5e4.tar.gz
Skyblocker-37eb5bfad25b1e0c3326ed27744c38f81513b5e4.tar.bz2
Skyblocker-37eb5bfad25b1e0c3326ed27744c38f81513b5e4.zip
Waterboard Solver (#467)
* Add waterboard detection and parsing * Solve waterboard * Render lines through walls * Fix lines * Add lever highlights
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java16
2 files changed, 14 insertions, 14 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
index 70a0fd8c..bd10767f 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java
@@ -16,9 +16,11 @@ import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.debug.Debug;
import de.hysky.skyblocker.utils.Constants;
+import de.hysky.skyblocker.utils.Tickable;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.scheduler.Scheduler;
import it.unimi.dsi.fastutil.objects.Object2ByteMap;
+import it.unimi.dsi.fastutil.objects.Object2ByteMaps;
import it.unimi.dsi.fastutil.objects.Object2ByteOpenHashMap;
import it.unimi.dsi.fastutil.objects.ObjectIntPair;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
@@ -91,7 +93,7 @@ public class DungeonManager {
* @implNote Not using {@link Registry#getId(Object) Registry#getId(Block)} and {@link Blocks Blocks} since this is also used by {@link de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonRoomsDFU DungeonRoomsDFU}, which runs outside of Minecraft.
*/
@SuppressWarnings("JavadocReference")
- protected static final Object2ByteMap<String> NUMERIC_ID = new Object2ByteOpenHashMap<>(Map.ofEntries(
+ protected static final Object2ByteMap<String> NUMERIC_ID = Object2ByteMaps.unmodifiable(new Object2ByteOpenHashMap<>(Map.ofEntries(
Map.entry("minecraft:stone", (byte) 1),
Map.entry("minecraft:diorite", (byte) 2),
Map.entry("minecraft:polished_diorite", (byte) 3),
@@ -113,7 +115,7 @@ public class DungeonManager {
Map.entry("minecraft:gray_terracotta", (byte) 19),
Map.entry("minecraft:cyan_terracotta", (byte) 20),
Map.entry("minecraft:black_terracotta", (byte) 21)
- ));
+ )));
/**
* Block data for dungeon rooms. See {@link de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonRoomsDFU DungeonRoomsDFU} for format details and how it's generated.
* All access to this map must check {@link #isRoomsLoaded()} to prevent concurrent modification.
@@ -502,7 +504,7 @@ public class DungeonManager {
* <li> Create a new room. </li>
* </ul>
* <li> Sets {@link #currentRoom} to the current room, either created from the previous step or from {@link #rooms}. </li>
- * <li> Calls {@link Room#tick()} on {@link #currentRoom}. </li>
+ * <li> Calls {@link Tickable#tick(MinecraftClient)} on {@link #currentRoom}. </li>
* </ul>
*/
@SuppressWarnings("JavadocReference")
@@ -560,7 +562,7 @@ public class DungeonManager {
}
currentRoom = room;
}
- currentRoom.tick();
+ currentRoom.tick(client);
}
/**
@@ -728,7 +730,7 @@ public class DungeonManager {
*
* @return {@code true} if {@link #currentRoom} is not null and {@link #isRoomMatched(Room)}
*/
- private static boolean isCurrentRoomMatched() {
+ public static boolean isCurrentRoomMatched() {
return isRoomMatched(currentRoom);
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java
index 4857e8fe..3e25a8f1 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java
@@ -299,20 +299,18 @@ public class Room implements Tickable, Renderable {
*/
@SuppressWarnings("JavadocReference")
@Override
- public void tick() {
- MinecraftClient client = MinecraftClient.getInstance();
- ClientWorld world = client.world;
- if (world == null) {
+ public void tick(MinecraftClient client) {
+ if (client.world == null) {
return;
}
for (Tickable tickable : tickables) {
- tickable.tick();
+ tickable.tick(client);
}
// Wither and blood door
if (SkyblockerConfigManager.get().locations.dungeons.doorHighlight.enableDoorHighlight && doorPos == null) {
- doorPos = DungeonMapUtils.getWitherBloodDoorPos(world, segments);
+ doorPos = DungeonMapUtils.getWitherBloodDoorPos(client.world, segments);
if (doorPos != null) {
doorBox = new Box(doorPos.getX(), doorPos.getY(), doorPos.getZ(), doorPos.getX() + DOOR_SIZE.getX(), doorPos.getY() + DOOR_SIZE.getY(), doorPos.getZ() + DOOR_SIZE.getZ());
}
@@ -329,7 +327,7 @@ public class Room implements Tickable, Renderable {
}
findRoom = CompletableFuture.runAsync(() -> {
for (BlockPos pos : BlockPos.iterate(player.getBlockPos().add(-5, -5, -5), player.getBlockPos().add(5, 5, 5))) {
- if (segments.contains(DungeonMapUtils.getPhysicalRoomPos(pos)) && notInDoorway(pos) && checkedBlocks.add(pos) && checkBlock(world, pos)) {
+ if (segments.contains(DungeonMapUtils.getPhysicalRoomPos(pos)) && notInDoorway(pos) && checkedBlocks.add(pos) && checkBlock(client.world, pos)) {
break;
}
}
@@ -506,14 +504,14 @@ public class Room implements Tickable, Renderable {
/**
* Fails if !{@link #isMatched()}
*/
- protected BlockPos actualToRelative(BlockPos pos) {
+ public BlockPos actualToRelative(BlockPos pos) {
return DungeonMapUtils.actualToRelative(direction, physicalCornerPos, pos);
}
/**
* Fails if !{@link #isMatched()}
*/
- protected BlockPos relativeToActual(BlockPos pos) {
+ public BlockPos relativeToActual(BlockPos pos) {
return DungeonMapUtils.relativeToActual(direction, physicalCornerPos, pos);
}