aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-12-20 16:39:17 +0800
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-12-20 16:46:24 +0800
commit5b1b97b1b6380fcd6a7670c01e633acdf41ae0dc (patch)
tree65e99ffa1a16ec6ea40a2fb66bcccd2693d5f201
parentc8136497ef6198e6b8a426fc23ccadeefe27ebdb (diff)
downloadSkyblocker-5b1b97b1b6380fcd6a7670c01e633acdf41ae0dc.tar.gz
Skyblocker-5b1b97b1b6380fcd6a7670c01e633acdf41ae0dc.tar.bz2
Skyblocker-5b1b97b1b6380fcd6a7670c01e633acdf41ae0dc.zip
Add match against command
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java34
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java6
3 files changed, 43 insertions, 10 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 7705ca46..6135e6b5 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
@@ -7,7 +7,7 @@ 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.arguments.StringArgumentType;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.serialization.JsonOps;
@@ -218,6 +218,7 @@ public class DungeonManager {
.then(literal("addWaypointRelatively").then(addCustomWaypointCommand(true)))
.then(literal("removeWaypoint").then(removeCustomWaypointCommand(false)))
.then(literal("removeWaypointRelatively").then(removeCustomWaypointCommand(true)))
+ .then(literal("matchAgainst").then(matchAgainstCommand()))
))));
ClientPlayConnectionEvents.JOIN.register(((handler, sender, client) -> reset()));
}
@@ -304,7 +305,7 @@ public class DungeonManager {
SkyblockerMod.GSON.fromJson(reader, JsonObject.class).asMap().forEach((room, jsonElement) -> map.put(room.toLowerCase().replaceAll(" ", "-"), jsonElement));
}
- private static ArgumentBuilder<FabricClientCommandSource, RequiredArgumentBuilder<FabricClientCommandSource, Integer>> markSecretsCommand(boolean found) {
+ private static RequiredArgumentBuilder<FabricClientCommandSource, Integer> markSecretsCommand(boolean found) {
return argument("secretIndex", IntegerArgumentType.integer()).executes(context -> {
int secretIndex = IntegerArgumentType.getInteger(context, "secretIndex");
if (markSecrets(secretIndex, found)) {
@@ -340,7 +341,7 @@ public class DungeonManager {
return Command.SINGLE_SUCCESS;
}
- private static ArgumentBuilder<FabricClientCommandSource, RequiredArgumentBuilder<FabricClientCommandSource, PosArgument>> addCustomWaypointCommand(boolean relative) {
+ private static RequiredArgumentBuilder<FabricClientCommandSource, PosArgument> addCustomWaypointCommand(boolean relative) {
return argument("pos", BlockPosArgumentType.blockPos())
.then(argument("secretIndex", IntegerArgumentType.integer())
.then(argument("category", SecretWaypoint.Category.CategoryArgumentType.category())
@@ -372,7 +373,7 @@ public class DungeonManager {
return Command.SINGLE_SUCCESS;
}
- private static ArgumentBuilder<FabricClientCommandSource, RequiredArgumentBuilder<FabricClientCommandSource, PosArgument>> removeCustomWaypointCommand(boolean relative) {
+ private static RequiredArgumentBuilder<FabricClientCommandSource, PosArgument> removeCustomWaypointCommand(boolean relative) {
return argument("pos", BlockPosArgumentType.blockPos())
.executes(context -> {
// TODO Less hacky way with custom ClientBlockPosArgumentType
@@ -400,6 +401,10 @@ public class DungeonManager {
return Command.SINGLE_SUCCESS;
}
+ private static RequiredArgumentBuilder<FabricClientCommandSource, String> matchAgainstCommand() {
+ return argument("room", StringArgumentType.string()).then(argument("direction", Room.Direction.DirectionArgumentType.direction()));
+ }
+
/**
* Updates the dungeon. The general idea is similar to the Dungeon Rooms Mod.
* <p></p>
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 fffe1bd2..96e3fadd 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
@@ -6,6 +6,7 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.context.CommandContext;
+import com.mojang.serialization.Codec;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.events.DungeonEvents;
import de.hysky.skyblocker.utils.Constants;
@@ -23,11 +24,13 @@ import net.minecraft.block.MapColor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.world.ClientWorld;
+import net.minecraft.command.argument.EnumArgumentType;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.mob.AmbientEntity;
import net.minecraft.registry.Registries;
import net.minecraft.text.Text;
+import net.minecraft.util.StringIdentifiable;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Box;
@@ -650,11 +653,36 @@ public class Room {
}
}
- public enum Direction {
- NW, NE, SW, SE
+ enum Direction implements StringIdentifiable {
+ NW("northwest"), NE("northeast"), SW("southwest"), SE("southeast");
+ private static final Codec<Direction> CODEC = StringIdentifiable.createCodec(Direction::values);
+ private final String name;
+
+ Direction(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String asString() {
+ return name;
+ }
+
+ static class DirectionArgumentType extends EnumArgumentType<Direction> {
+ DirectionArgumentType() {
+ super(CODEC, Direction::values);
+ }
+
+ static DirectionArgumentType direction() {
+ return new DirectionArgumentType();
+ }
+
+ static <S> Direction getDirection(CommandContext<S> context, String name) {
+ return context.getArgument(name, Direction.class);
+ }
+ }
}
- public enum MatchState {
+ private enum MatchState {
MATCHING, DOUBLE_CHECKING, MATCHED, FAILED
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
index 75a0c20f..b7c19210 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
@@ -173,15 +173,15 @@ public class SecretWaypoint extends Waypoint {
}
static class CategoryArgumentType extends EnumArgumentType<Category> {
- public CategoryArgumentType() {
+ CategoryArgumentType() {
super(Category.CODEC, Category::values);
}
- public static CategoryArgumentType category() {
+ static CategoryArgumentType category() {
return new CategoryArgumentType();
}
- public static <S> Category getCategory(CommandContext<S> context, String name) {
+ static <S> Category getCategory(CommandContext<S> context, String name) {
return context.getArgument(name, Category.class);
}
}