fancydialogs: Add dialog command type

This commit is contained in:
Oliver
2025-06-15 21:22:14 +02:00
committed by Oliver
parent 1a3707ff51
commit 25c4844b48
5 changed files with 117 additions and 19 deletions

View File

@@ -2,8 +2,10 @@ package com.fancyinnovations.fancydialogs;
import com.fancyinnovations.fancydialogs.api.Dialog; import com.fancyinnovations.fancydialogs.api.Dialog;
import com.fancyinnovations.fancydialogs.api.data.DialogData; import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.commands.DialogCMD;
import com.fancyinnovations.fancydialogs.commands.FancyDialogsCMD; import com.fancyinnovations.fancydialogs.commands.FancyDialogsCMD;
import com.fancyinnovations.fancydialogs.commands.TutorialCMD; import com.fancyinnovations.fancydialogs.commands.TutorialCMD;
import com.fancyinnovations.fancydialogs.commands.types.DialogCommandType;
import com.fancyinnovations.fancydialogs.config.FDFeatureFlags; import com.fancyinnovations.fancydialogs.config.FDFeatureFlags;
import com.fancyinnovations.fancydialogs.config.FancyDialogsConfig; import com.fancyinnovations.fancydialogs.config.FancyDialogsConfig;
import com.fancyinnovations.fancydialogs.dialog.DialogImpl; import com.fancyinnovations.fancydialogs.dialog.DialogImpl;
@@ -135,11 +137,7 @@ public class FancyDialogsPlugin extends JavaPlugin {
registerListeners(); registerListeners();
Lamp<BukkitCommandActor> lamp = BukkitLamp registerCommands();
.builder(this)
.build();
lamp.register(FancyDialogsCMD.INSTANCE);
lamp.register(TutorialCMD.INSTANCE);
// FancyNpcs actions // FancyNpcs actions
new OpenDialogNpcAction().register(); new OpenDialogNpcAction().register();
@@ -160,6 +158,21 @@ public class FancyDialogsPlugin extends JavaPlugin {
Bukkit.getPluginManager().registerEvents(new PlayerJoinListener(), this); Bukkit.getPluginManager().registerEvents(new PlayerJoinListener(), this);
} }
private void registerCommands() {
Lamp.Builder<BukkitCommandActor> lampBuilder = BukkitLamp
.builder(this);
lampBuilder.parameterTypes(builder -> {
builder.addParameterType(Dialog.class, DialogCommandType.INSTANCE);
});
Lamp<BukkitCommandActor> lamp = lampBuilder.build();
lamp.register(FancyDialogsCMD.INSTANCE);
lamp.register(DialogCMD.INSTANCE);
lamp.register(TutorialCMD.INSTANCE);
}
public ExtendedFancyLogger getFancyLogger() { public ExtendedFancyLogger getFancyLogger() {
return fancyLogger; return fancyLogger;
} }

View File

@@ -0,0 +1,43 @@
package com.fancyinnovations.fancydialogs.commands;
import com.fancyinnovations.fancydialogs.FancyDialogsPlugin;
import com.fancyinnovations.fancydialogs.api.Dialog;
import de.oliver.fancylib.translations.Translator;
import org.bukkit.entity.Player;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.Description;
import revxrsal.commands.annotation.Optional;
import revxrsal.commands.bukkit.annotation.CommandPermission;
public final class DialogCMD {
public static final DialogCMD INSTANCE = new DialogCMD();
private final FancyDialogsPlugin plugin = FancyDialogsPlugin.get();
private final Translator translator = FancyDialogsPlugin.get().getTranslator();
private DialogCMD() {
}
@Command("dialog open <dialog>")
@Description("Opens a dialog (for a player) by its ID")
@CommandPermission("fancydialogs.commands.registry.unregister")
public void open(
Player actor,
Dialog dialog,
@Optional Player target
) {
if (target == null) {
dialog.open(actor);
translator.translate("commands.dialog.open.self")
.replace("id", dialog.getId())
.send(actor);
} else {
dialog.open(target);
translator.translate("commands.dialog.open.other")
.replace("id", dialog.getId())
.replace("target", target.getName())
.send(actor);
}
}
}

View File

@@ -124,24 +124,16 @@ public final class FancyDialogsCMD {
translator.translate("commands.fancydialogs.registry.clear.success").send(actor.sender()); translator.translate("commands.fancydialogs.registry.clear.success").send(actor.sender());
} }
@Command("fancydialogs registry unregister <id>") @Command("fancydialogs registry unregister <dialog>")
@Description("Unregisters a dialog by its ID") @Description("Unregisters a dialog by its ID")
@CommandPermission("fancydialogs.commands.registry.unregister") @CommandPermission("fancydialogs.commands.registry.unregister")
public void registryUnregister( public void registryUnregister(
final BukkitCommandActor actor, final BukkitCommandActor actor,
final String id final Dialog dialog
) { ) {
Dialog dialog = plugin.getDialogRegistry().get(id); plugin.getDialogRegistry().unregister(dialog.getId());
if (dialog == null) {
translator.translate("commands.fancydialogs.registry.unregister.not_found")
.replace("id", id)
.send(actor.sender());
return;
}
plugin.getDialogRegistry().unregister(id);
translator.translate("commands.fancydialogs.registry.unregister.success") translator.translate("commands.fancydialogs.registry.unregister.success")
.replace("id", id) .replace("id", dialog.getId())
.send(actor.sender()); .send(actor.sender());
} }
} }

View File

@@ -0,0 +1,45 @@
package com.fancyinnovations.fancydialogs.commands.types;
import com.fancyinnovations.fancydialogs.FancyDialogsPlugin;
import com.fancyinnovations.fancydialogs.api.Dialog;
import com.fancyinnovations.fancydialogs.registry.DialogRegistry;
import org.jetbrains.annotations.NotNull;
import revxrsal.commands.autocomplete.SuggestionProvider;
import revxrsal.commands.bukkit.actor.BukkitCommandActor;
import revxrsal.commands.node.ExecutionContext;
import revxrsal.commands.parameter.ParameterType;
import revxrsal.commands.stream.MutableStringStream;
public class DialogCommandType implements ParameterType<BukkitCommandActor, Dialog> {
public static final DialogCommandType INSTANCE = new DialogCommandType();
private static final DialogRegistry REGISTRY = FancyDialogsPlugin.get().getDialogRegistry();
private DialogCommandType() {
// Private constructor to prevent instantiation
}
@Override
public Dialog parse(@NotNull MutableStringStream input, @NotNull ExecutionContext<@NotNull BukkitCommandActor> context) {
String id = input.readString();
Dialog dialog = REGISTRY.get(id);
if (dialog != null) {
return dialog;
}
FancyDialogsPlugin.get().getTranslator()
.translate("dialog.not_found")
.replace("id", id)
.send(context.actor().sender());
return null;
}
@Override
public @NotNull SuggestionProvider<@NotNull BukkitCommandActor> defaultSuggestions() {
return (ctx) -> REGISTRY.getAll().stream()
.map(Dialog::getId)
.toList();
}
}

View File

@@ -1,6 +1,12 @@
language_name: default language_name: default
messages: messages:
dialog:
not_found: "<dark_gray> <gray>Dialog {warningColor}{id}<gray> is not registered."
commands: commands:
dialog:
open:
self: "<dark_gray> <gray>Opened dialog {warningColor}{id}<gray>."
other: "<dark_gray> <gray>Opened dialog {warningColor}{id}<gray> for player {target}."
fancydialogs: fancydialogs:
version: "<dark_gray> <gray>You are running FancyDialogs {warningColor}{version}<gray>." version: "<dark_gray> <gray>You are running FancyDialogs {warningColor}{version}<gray>."
storage: storage:
@@ -18,5 +24,4 @@ messages:
clear: clear:
success: "<dark_gray> <gray>Successfully cleared all registered dialogs." success: "<dark_gray> <gray>Successfully cleared all registered dialogs."
unregister: unregister:
success: "<dark_gray> <gray>Successfully unregistered dialog {warningColor}{id}<gray>." success: "<dark_gray> <gray>Successfully unregistered dialog {warningColor}{id}<gray>."
not_found: "<dark_gray> <gray>Dialog {warningColor}{id}<gray> is not registered."