mirror of
https://github.com/FancyInnovations/FancyPlugins.git
synced 2025-12-06 07:43:36 +00:00
fancydialogs: Add dialog command type
This commit is contained in:
@@ -2,8 +2,10 @@ package com.fancyinnovations.fancydialogs;
|
||||
|
||||
import com.fancyinnovations.fancydialogs.api.Dialog;
|
||||
import com.fancyinnovations.fancydialogs.api.data.DialogData;
|
||||
import com.fancyinnovations.fancydialogs.commands.DialogCMD;
|
||||
import com.fancyinnovations.fancydialogs.commands.FancyDialogsCMD;
|
||||
import com.fancyinnovations.fancydialogs.commands.TutorialCMD;
|
||||
import com.fancyinnovations.fancydialogs.commands.types.DialogCommandType;
|
||||
import com.fancyinnovations.fancydialogs.config.FDFeatureFlags;
|
||||
import com.fancyinnovations.fancydialogs.config.FancyDialogsConfig;
|
||||
import com.fancyinnovations.fancydialogs.dialog.DialogImpl;
|
||||
@@ -135,11 +137,7 @@ public class FancyDialogsPlugin extends JavaPlugin {
|
||||
|
||||
registerListeners();
|
||||
|
||||
Lamp<BukkitCommandActor> lamp = BukkitLamp
|
||||
.builder(this)
|
||||
.build();
|
||||
lamp.register(FancyDialogsCMD.INSTANCE);
|
||||
lamp.register(TutorialCMD.INSTANCE);
|
||||
registerCommands();
|
||||
|
||||
// FancyNpcs actions
|
||||
new OpenDialogNpcAction().register();
|
||||
@@ -160,6 +158,21 @@ public class FancyDialogsPlugin extends JavaPlugin {
|
||||
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() {
|
||||
return fancyLogger;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -124,24 +124,16 @@ public final class FancyDialogsCMD {
|
||||
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")
|
||||
@CommandPermission("fancydialogs.commands.registry.unregister")
|
||||
public void registryUnregister(
|
||||
final BukkitCommandActor actor,
|
||||
final String id
|
||||
final Dialog dialog
|
||||
) {
|
||||
Dialog dialog = plugin.getDialogRegistry().get(id);
|
||||
if (dialog == null) {
|
||||
translator.translate("commands.fancydialogs.registry.unregister.not_found")
|
||||
.replace("id", id)
|
||||
.send(actor.sender());
|
||||
return;
|
||||
}
|
||||
|
||||
plugin.getDialogRegistry().unregister(id);
|
||||
plugin.getDialogRegistry().unregister(dialog.getId());
|
||||
translator.translate("commands.fancydialogs.registry.unregister.success")
|
||||
.replace("id", id)
|
||||
.replace("id", dialog.getId())
|
||||
.send(actor.sender());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,12 @@
|
||||
language_name: default
|
||||
messages:
|
||||
dialog:
|
||||
not_found: "<dark_gray>› <gray>Dialog {warningColor}{id}<gray> is not registered."
|
||||
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:
|
||||
version: "<dark_gray>› <gray>You are running FancyDialogs {warningColor}{version}<gray>."
|
||||
storage:
|
||||
@@ -19,4 +25,3 @@ messages:
|
||||
success: "<dark_gray>› <gray>Successfully cleared all registered dialogs."
|
||||
unregister:
|
||||
success: "<dark_gray>› <gray>Successfully unregistered dialog {warningColor}{id}<gray>."
|
||||
not_found: "<dark_gray>› <gray>Dialog {warningColor}{id}<gray> is not registered."
|
||||
Reference in New Issue
Block a user