From 5b1b97b1b6380fcd6a7670c01e633acdf41ae0dc Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 20 Dec 2023 16:39:17 +0800 Subject: Add match against command --- .../skyblock/dungeon/secrets/DungeonManager.java | 13 ++++++--- .../skyblocker/skyblock/dungeon/secrets/Room.java | 34 ++++++++++++++++++++-- .../skyblock/dungeon/secrets/SecretWaypoint.java | 6 ++-- 3 files changed, 43 insertions(+), 10 deletions(-) (limited to 'src') 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> markSecretsCommand(boolean found) { + private static RequiredArgumentBuilder 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> addCustomWaypointCommand(boolean relative) { + private static RequiredArgumentBuilder 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> removeCustomWaypointCommand(boolean relative) { + private static RequiredArgumentBuilder 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 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. *

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 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 { + DirectionArgumentType() { + super(CODEC, Direction::values); + } + + static DirectionArgumentType direction() { + return new DirectionArgumentType(); + } + + static Direction getDirection(CommandContext 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 { - public CategoryArgumentType() { + CategoryArgumentType() { super(Category.CODEC, Category::values); } - public static CategoryArgumentType category() { + static CategoryArgumentType category() { return new CategoryArgumentType(); } - public static Category getCategory(CommandContext context, String name) { + static Category getCategory(CommandContext context, String name) { return context.getArgument(name, Category.class); } } -- cgit