From 071c2b7ed9d36461440902169dcacdf8ddcb3145 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Tue, 19 Aug 2025 22:18:13 +0700 Subject: [PATCH] !feat: added quest context --- .../msb3/api/boot/ServerBootstrap.java | 1 + .../msb3/api/command/DebugCommands.java | 1 + .../msb3/api/command/DebugQuestCommand.java | 115 ++++++++++++++++++ .../player/defaults/PlayerQuestContext.java | 21 ++++ 4 files changed, 138 insertions(+) create mode 100644 api/src/main/java/ru/dragonestia/msb3/api/command/DebugQuestCommand.java create mode 100644 api/src/main/java/ru/dragonestia/msb3/api/player/defaults/PlayerQuestContext.java diff --git a/api/src/main/java/ru/dragonestia/msb3/api/boot/ServerBootstrap.java b/api/src/main/java/ru/dragonestia/msb3/api/boot/ServerBootstrap.java index 5dcf30b..8071cc8 100644 --- a/api/src/main/java/ru/dragonestia/msb3/api/boot/ServerBootstrap.java +++ b/api/src/main/java/ru/dragonestia/msb3/api/boot/ServerBootstrap.java @@ -195,6 +195,7 @@ public final class ServerBootstrap { PlayerContextManager.registerContext(TalksContext.class, TalksContext::new); PlayerContextManager.registerContext(DebugParamsContext.class, DebugParamsContext::new); PlayerContextManager.registerContext(PlayerScriptContext.class, PlayerScriptContext::new); + PlayerContextManager.registerContext(PlayerQuestContext.class, PlayerQuestContext::new); } private void initDefaultSkins() { diff --git a/api/src/main/java/ru/dragonestia/msb3/api/command/DebugCommands.java b/api/src/main/java/ru/dragonestia/msb3/api/command/DebugCommands.java index 80c9852..e783abc 100644 --- a/api/src/main/java/ru/dragonestia/msb3/api/command/DebugCommands.java +++ b/api/src/main/java/ru/dragonestia/msb3/api/command/DebugCommands.java @@ -32,6 +32,7 @@ public class DebugCommands { DebugRendererCommand.register(); DebugAICommand.register(); ScriptCommand.register(); + DebugQuestCommand.register(); log.info("Registered debug commands"); } diff --git a/api/src/main/java/ru/dragonestia/msb3/api/command/DebugQuestCommand.java b/api/src/main/java/ru/dragonestia/msb3/api/command/DebugQuestCommand.java new file mode 100644 index 0000000..d956f4d --- /dev/null +++ b/api/src/main/java/ru/dragonestia/msb3/api/command/DebugQuestCommand.java @@ -0,0 +1,115 @@ +package ru.dragonestia.msb3.api.command; + +import net.kyori.adventure.text.Component; +import net.minestom.server.MinecraftServer; +import net.minestom.server.command.CommandSender; +import net.minestom.server.command.builder.Command; +import net.minestom.server.command.builder.CommandContext; +import net.minestom.server.command.builder.arguments.ArgumentString; +import net.minestom.server.command.builder.arguments.ArgumentType; +import net.minestom.server.entity.Player; +import ru.dragonestia.msb3.api.player.PlayerContext; +import ru.dragonestia.msb3.api.player.defaults.PlayerQuestContext; + +public class DebugQuestCommand extends Command { + + private final ArgumentString argQuestId = new ArgumentString("Quest ID"); + + public DebugQuestCommand() { + super("debug_quest"); + + setDefaultExecutor(this::defaultHandler); + addSyntax(this::listAllReceivedQuests, ArgumentType.Literal("list")); + addSyntax(this::listAllCompletedQuests, ArgumentType.Literal("completed")); + addSyntax(this::viewQuestDetails, ArgumentType.Literal("details"), argQuestId); + addSyntax(this::completeQuest, ArgumentType.Literal("complete"), argQuestId); + addSyntax(this::cancelQuest, ArgumentType.Literal("cancel"), argQuestId); + addSyntax(this::failQuest, ArgumentType.Literal("fail"), argQuestId); + } + + public static void register() { + MinecraftServer.getCommandManager().register(new DebugQuestCommand()); + } + + private void defaultHandler(CommandSender sender, CommandContext ctx) { + var player = (Player) sender; + + player.sendMessage("Debug Quest commands:"); + player.sendMessage("/debug_quest list - List all received quests"); + player.sendMessage("/debug_quest completed - List all completed, cancelled and failed quests"); + player.sendMessage("/debug_quest details - View quest details"); + player.sendMessage("/debug_quest complete - Force complete quest"); + player.sendMessage("/debug_quest cancel - Force cancel quest"); + player.sendMessage("/debug_quest fail - Force fail quest"); + } + + private void listAllReceivedQuests(CommandSender sender, CommandContext ctx) { + var player = (Player) sender; + var service = PlayerContext.of(player, PlayerQuestContext.class); + + var output = Component.text() + .append(Component.text("Received quests(%s): %s")); + + // TODO + + player.sendMessage(output.build()); + } + + private void listAllCompletedQuests(CommandSender sender, CommandContext ctx) { + var player = (Player) sender; + var service = PlayerContext.of(player, PlayerQuestContext.class); + + var outputCompleted = Component.text() + .append(Component.text("Completed quests(%s): %s")); + + // TODO + + player.sendMessage(outputCompleted.build()); + + var outputCancelled = Component.text() + .append(Component.text("Cancelled quests(%s): %s")); + + // TODO + + player.sendMessage(outputCancelled.build()); + + var outputFailed = Component.text() + .append(Component.text("Failed quests(%s): %s")); + + // TODO + + player.sendMessage(outputFailed.build()); + } + + private void viewQuestDetails(CommandSender sender, CommandContext ctx) { + var player = (Player) sender; + var service = PlayerContext.of(player, PlayerQuestContext.class); + var questId = ctx.get(argQuestId); + + // TODO + } + + private void completeQuest(CommandSender sender, CommandContext ctx) { + var player = (Player) sender; + var service = PlayerContext.of(player, PlayerQuestContext.class); + var questId = ctx.get(argQuestId); + + // TODO + } + + private void cancelQuest(CommandSender sender, CommandContext ctx) { + var player = (Player) sender; + var service = PlayerContext.of(player, PlayerQuestContext.class); + var questId = ctx.get(argQuestId); + + // TODO + } + + private void failQuest(CommandSender sender, CommandContext ctx) { + var player = (Player) sender; + var service = PlayerContext.of(player, PlayerQuestContext.class); + var questId = ctx.get(argQuestId); + + // TODO + } +} diff --git a/api/src/main/java/ru/dragonestia/msb3/api/player/defaults/PlayerQuestContext.java b/api/src/main/java/ru/dragonestia/msb3/api/player/defaults/PlayerQuestContext.java new file mode 100644 index 0000000..4c2c4bb --- /dev/null +++ b/api/src/main/java/ru/dragonestia/msb3/api/player/defaults/PlayerQuestContext.java @@ -0,0 +1,21 @@ +package ru.dragonestia.msb3.api.player.defaults; + +import ru.dragonestia.msb3.api.player.MsbPlayer; +import ru.dragonestia.msb3.api.player.PlayerContext; + +public class PlayerQuestContext extends PlayerContext { + + public PlayerQuestContext(MsbPlayer player) { + super(player); + } + + @Override + public void init() { + + } + + @Override + public void dispose() { + + } +}