aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-08-20 15:38:11 +0800
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-08-30 22:49:56 -0400
commita015c67b635431d5bb9aa3208dfb1828a6fedc8c (patch)
tree6dcff751d078bfb904b8390cba4025f35046f032 /src/main/java
parent3a3199f804b2267b436a336e5fe1a924013c138d (diff)
downloadSkyblocker-a015c67b635431d5bb9aa3208dfb1828a6fedc8c.tar.gz
Skyblocker-a015c67b635431d5bb9aa3208dfb1828a6fedc8c.tar.bz2
Skyblocker-a015c67b635431d5bb9aa3208dfb1828a6fedc8c.zip
Add ability to mark secrets as found or missing
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java32
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/Room.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java13
3 files changed, 45 insertions, 4 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
index 11139971..1a600309 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
@@ -3,12 +3,18 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon.secrets;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
+import com.mojang.brigadier.Command;
+import com.mojang.brigadier.arguments.IntegerArgumentType;
+import com.mojang.brigadier.builder.ArgumentBuilder;
+import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import it.unimi.dsi.fastutil.objects.Object2ByteMap;
import it.unimi.dsi.fastutil.objects.Object2ByteOpenHashMap;
import it.unimi.dsi.fastutil.objects.ObjectIntPair;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
@@ -42,6 +48,9 @@ import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.zip.InflaterInputStream;
+import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument;
+import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
+
public class DungeonSecrets {
protected static final Logger LOGGER = LoggerFactory.getLogger(DungeonSecrets.class);
private static final String DUNGEONS_PATH = "dungeons";
@@ -133,6 +142,9 @@ public class DungeonSecrets {
ClientReceiveMessageEvents.GAME.register(DungeonSecrets::onChatMessage);
ClientReceiveMessageEvents.GAME_CANCELED.register(DungeonSecrets::onChatMessage);
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)))))));
}
private static void load() {
@@ -184,6 +196,18 @@ public class DungeonSecrets {
}
}
+ private static ArgumentBuilder<FabricClientCommandSource, RequiredArgumentBuilder<FabricClientCommandSource, Integer>> markSecretsCommand(boolean found) {
+ return argument("secret", IntegerArgumentType.integer()).executes(context -> {
+ int secretIndex = IntegerArgumentType.getInteger(context, "secret");
+ if (markSecrets(secretIndex, found)) {
+ context.getSource().sendFeedback(Text.translatable(found ? "skyblocker.dungeons.secrets.markSecretFound" : "skyblocker.dungeons.secrets.markSecretMissing", secretIndex));
+ } else {
+ context.getSource().sendError(Text.translatable(found ? "skyblocker.dungeons.secrets.markSecretFoundUnable" : "skyblocker.dungeons.secrets.markSecretMissingUnable", secretIndex));
+ }
+ return Command.SINGLE_SUCCESS;
+ });
+ }
+
/**
* Updates the dungeon. The general idea is similar to the Dungeon Rooms Mod.
* <p></p>
@@ -339,6 +363,14 @@ public class DungeonSecrets {
}
}
+ public static boolean markSecrets(int secretIndex, boolean found) {
+ if (isCurrentRoomMatched()) {
+ currentRoom.markSecrets(secretIndex, found);
+ return true;
+ }
+ return false;
+ }
+
/**
* Gets the room at the given physical position.
*
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 c8bb27aa..3f69fca8 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
@@ -397,6 +397,10 @@ public class Room {
DungeonSecrets.LOGGER.info(msg, args);
}
+ protected void markSecrets(int secretIndex, boolean found) {
+ secretWaypoints.row(secretIndex).values().forEach(SecretWaypoint.getStatusSetter(found));
+ }
+
public enum Type {
ENTRANCE(MapColor.DARK_GREEN.getRenderColorByte(MapColor.Brightness.HIGH)),
ROOM(MapColor.ORANGE.getRenderColorByte(MapColor.Brightness.LOWEST)),
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 3da9f487..e44f2ebe 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,6 +12,7 @@ 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;
@@ -20,8 +21,8 @@ public class SecretWaypoint {
final int secretIndex;
final Category category;
private final Text name;
- final BlockPos pos;
- final Vec3d centerPos;
+ private final BlockPos pos;
+ private final Vec3d centerPos;
private boolean missing;
SecretWaypoint(int secretIndex, JsonObject waypoint, String name, BlockPos pos) {
@@ -41,7 +42,11 @@ public class SecretWaypoint {
return secretWaypoint -> entity.squaredDistanceTo(secretWaypoint.centerPos) <= 36D;
}
- public boolean shouldRender() {
+ static Consumer<SecretWaypoint> getStatusSetter(boolean found) {
+ return secretWaypoint -> secretWaypoint.missing = !found;
+ }
+
+ boolean shouldRender() {
return category.isEnabled() && missing;
}
@@ -53,7 +58,7 @@ public class SecretWaypoint {
return category.needsItemPickup();
}
- public void setFound() {
+ void setFound() {
this.missing = false;
}