aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnton <79146501+btwonion@users.noreply.github.com>2024-08-18 21:38:37 +0200
committerGitHub <noreply@github.com>2024-08-18 15:38:37 -0400
commitec6a2176bf6636c3c2fe1daaa5d2d228e946cd87 (patch)
treee88a71b54547d65fd54ccd79fb6df62c3427462e /src
parent996ff078f92fe4c825eb53aab3ddd12601a685fa (diff)
downloadSkyblocker-ec6a2176bf6636c3c2fe1daaa5d2d228e946cd87.tar.gz
Skyblocker-ec6a2176bf6636c3c2fe1daaa5d2d228e946cd87.tar.bz2
Skyblocker-ec6a2176bf6636c3c2fe1daaa5d2d228e946cd87.zip
Mark all secrets missing in subcommand (#927)
* add Room#markAllSecrets * create subcommand "markAllAsMissing" * use subcommand of markAsMissing * add suggestion for markAsMissing index argument * use IntStream instead of for * fix range
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java24
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java10
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json2
3 files changed, 33 insertions, 3 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 fbe99909..1429e2e0 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
@@ -8,6 +8,7 @@ import com.google.gson.JsonObject;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType;
+import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.serialization.JsonOps;
@@ -80,6 +81,7 @@ import java.nio.file.Path;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.regex.Pattern;
+import java.util.stream.IntStream;
import java.util.stream.Stream;
import java.util.zip.InflaterInputStream;
@@ -252,7 +254,7 @@ public class DungeonManager {
UseBlockCallback.EVENT.register((player, world, hand, hitResult) -> onUseBlock(world, hitResult));
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("dungeons").then(literal("secrets")
.then(literal("markAsFound").then(markSecretsCommand(true)))
- .then(literal("markAsMissing").then(markSecretsCommand(false)))
+ .then(literal("markAsMissing").then(markSecretsCommand(false)).then(markAllSecretsAsMissingCommand()))
.then(literal("getRelativePos").executes(DungeonManager::getRelativePos))
.then(literal("getRelativeTargetPos").executes(DungeonManager::getRelativeTargetPos))
.then(literal("addWaypoint").then(addCustomWaypointCommand(false, registryAccess)))
@@ -361,7 +363,12 @@ public class DungeonManager {
}
private static RequiredArgumentBuilder<FabricClientCommandSource, Integer> markSecretsCommand(boolean found) {
- return argument("secretIndex", IntegerArgumentType.integer()).executes(context -> {
+ return argument("secretIndex", IntegerArgumentType.integer()).suggests((provider, builder) -> {
+ if (isCurrentRoomMatched()) {
+ IntStream.rangeClosed(1, currentRoom.getSecretCount()).forEach(builder::suggest);
+ }
+ return builder.buildFuture();
+ }).executes(context -> {
int secretIndex = IntegerArgumentType.getInteger(context, "secretIndex");
if (markSecrets(secretIndex, found)) {
context.getSource().sendFeedback(Constants.PREFIX.get().append(Text.translatable(found ? "skyblocker.dungeons.secrets.markSecretFound" : "skyblocker.dungeons.secrets.markSecretMissing", secretIndex)));
@@ -372,6 +379,19 @@ public class DungeonManager {
});
}
+ private static LiteralArgumentBuilder<FabricClientCommandSource> markAllSecretsAsMissingCommand() {
+ return literal("all").executes(context -> {
+ if (isCurrentRoomMatched()) {
+ currentRoom.markAllSecrets(false);
+ context.getSource().sendFeedback(Constants.PREFIX.get().append(Text.translatable("skyblocker.dungeons.secrets.markSecretsMissing")));
+ } else {
+ context.getSource().sendFeedback(Constants.PREFIX.get().append(Text.translatable("skyblocker.dungeons.secrets.markSecretsMissingUnable")));
+ }
+
+ return Command.SINGLE_SUCCESS;
+ });
+ }
+
private static int getRelativePos(CommandContext<FabricClientCommandSource> context) {
return getRelativePos(context.getSource(), context.getSource().getPlayer().getBlockPos());
}
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 1f4f9ed6..e574b136 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
@@ -520,7 +520,7 @@ public class Room implements Tickable, Renderable {
*/
protected void onChatMessage(String message) {
if (isAllSecretsFound(message)) {
- secretWaypoints.values().forEach(SecretWaypoint::setFound);
+ markAllSecrets(true);
} else if (LOCKED_CHEST.equals(message) && lastChestSecretTime + 1000 > System.currentTimeMillis() && lastChestSecret != null) {
secretWaypoints.column(lastChestSecret).values().stream().filter(SecretWaypoint::needsInteraction).findAny()
.ifPresent(secretWaypoint -> markSecretsAndLogInfo(secretWaypoint, false, "[Skyblocker Dungeon Secrets] Detected locked chest interaction, setting secret #{} as missing", secretWaypoint.secretIndex));
@@ -622,6 +622,14 @@ public class Room implements Tickable, Renderable {
}
}
+ protected void markAllSecrets(boolean found) {
+ secretWaypoints.values().forEach(found ? SecretWaypoint::setFound : SecretWaypoint::setMissing);
+ }
+
+ protected int getSecretCount() {
+ return secretWaypoints.rowMap().size();
+ }
+
public enum Type {
ENTRANCE(MapColor.DARK_GREEN.getRenderColorByte(MapColor.Brightness.HIGH)),
ROOM(MapColor.ORANGE.getRenderColorByte(MapColor.Brightness.LOWEST)),
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index cbea310d..b0537af0 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -839,6 +839,8 @@
"skyblocker.dungeons.secrets.markSecretMissing": "§rMarked secret #%d as missing.",
"skyblocker.dungeons.secrets.markSecretFoundUnable": "§cUnable to mark secret #%d as found.",
"skyblocker.dungeons.secrets.markSecretMissingUnable": "§cUnable to mark secret #%d as missing.",
+ "skyblocker.dungeons.secrets.markSecretsMissing": "§rMarked all secrets in this room as missing.",
+ "skyblocker.dungeons.secrets.markSecretsMissingUnable": "§cUnable to mark secrets in this room as missing.",
"skyblocker.dungeons.secrets.posMessage": "§rRoom: %s, Direction: %s, X: %d, Y: %d, Z: %d",
"skyblocker.dungeons.secrets.noTarget": "§cNo target block found! (Are you pointing at a block in range?)",
"skyblocker.dungeons.secrets.notMatched": "§cThe current room is not matched! (Are you in a dungeon room?)",