4 Commits

14 changed files with 73 additions and 12 deletions

View File

@@ -57,6 +57,13 @@ public class Translator {
} }
for (File langFile : langFiles) { for (File langFile : langFiles) {
if (!langFile.isFile()) {
continue;
}
if (!langFile.getName().endsWith(".yml")) {
continue;
}
languages.add(loadLanguageFile(langFile)); languages.add(loadLanguageFile(langFile));
} }

View File

@@ -1 +1 @@
0.0.28 0.0.30

View File

@@ -1,9 +1,12 @@
package com.fancyinnovations.fancydialogs.api; package com.fancyinnovations.fancydialogs.api.dialogs;
import com.fancyinnovations.fancydialogs.api.Dialog;
import com.fancyinnovations.fancydialogs.api.FancyDialogs;
import com.fancyinnovations.fancydialogs.api.data.DialogBodyData; import com.fancyinnovations.fancydialogs.api.data.DialogBodyData;
import com.fancyinnovations.fancydialogs.api.data.DialogButton; import com.fancyinnovations.fancydialogs.api.data.DialogButton;
import com.fancyinnovations.fancydialogs.api.data.DialogData; import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs; import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogTextField;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
@@ -19,6 +22,7 @@ public class ConfirmationDialog {
private String title = "Confirmation"; private String title = "Confirmation";
private String confirmText = "Yes"; private String confirmText = "Yes";
private String cancelText = "No"; private String cancelText = "No";
private String expectedUserInput = "";
private Dialog dialog; private Dialog dialog;
private String confirmButtonId; private String confirmButtonId;
@@ -28,7 +32,7 @@ public class ConfirmationDialog {
private Runnable onCancel = () -> { private Runnable onCancel = () -> {
}; };
public ConfirmationDialog(String title, String question, String confirmText, String cancelText, Runnable onConfirm, Runnable onCancel) { public ConfirmationDialog(String title, String question, String confirmText, String cancelText, String expectedUserInput, Runnable onConfirm, Runnable onCancel) {
this.title = title; this.title = title;
this.question = question; this.question = question;
this.confirmText = confirmText; this.confirmText = confirmText;
@@ -56,6 +60,11 @@ public class ConfirmationDialog {
return this; return this;
} }
public ConfirmationDialog withExpectedUserInput(String expectedUserInput) {
this.expectedUserInput = expectedUserInput;
return this;
}
public ConfirmationDialog withOnConfirm(Runnable onConfirm) { public ConfirmationDialog withOnConfirm(Runnable onConfirm) {
this.onConfirm = onConfirm; this.onConfirm = onConfirm;
return this; return this;
@@ -103,18 +112,31 @@ public class ConfirmationDialog {
); );
this.cancelButtonId = cancelBtn.id(); this.cancelButtonId = cancelBtn.id();
List<DialogTextField> textFields = null;
if (expectedUserInput != null && !expectedUserInput.isEmpty()) {
textFields = List.of(
new DialogTextField("confirmation_user_input", "Type '" + expectedUserInput + "' to confirm", 0, "", expectedUserInput.length(), 1)
);
}
DialogInputs inputs = new DialogInputs(textFields, null, null);
DialogData dialogData = new DialogData( DialogData dialogData = new DialogData(
"confirmation_dialog_" + UUID.randomUUID(), "confirmation_dialog_" + UUID.randomUUID(),
title, title,
false, false,
List.of(new DialogBodyData(question)), List.of(new DialogBodyData(question)),
DialogInputs.EMPTY, // TODO add support for confirmation phrases inputs,
List.of(confirmBtn, cancelBtn) List.of(confirmBtn, cancelBtn)
); );
this.dialog = FancyDialogs.get().createDialog(dialogData); this.dialog = FancyDialogs.get().createDialog(dialogData);
} }
public String getExpectedUserInput() {
return expectedUserInput;
}
public String getConfirmButtonId() { public String getConfirmButtonId() {
return confirmButtonId; return confirmButtonId;
} }

View File

@@ -1,5 +1,6 @@
package com.fancyinnovations.fancydialogs.api; package com.fancyinnovations.fancydialogs.api.dialogs;
import com.fancyinnovations.fancydialogs.api.FancyDialogs;
import com.fancyinnovations.fancydialogs.api.data.DialogBodyData; import com.fancyinnovations.fancydialogs.api.data.DialogBodyData;
import com.fancyinnovations.fancydialogs.api.data.DialogData; import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs; import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs;

View File

@@ -6,6 +6,8 @@ import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Map;
public class DialogButtonClickedEvent extends Event { public class DialogButtonClickedEvent extends Event {
private static final HandlerList handlerList = new HandlerList(); private static final HandlerList handlerList = new HandlerList();
@@ -13,12 +15,14 @@ public class DialogButtonClickedEvent extends Event {
private final Player player; private final Player player;
private final String dialogId; private final String dialogId;
private final String buttonId; private final String buttonId;
private final Map<String, String> payload;
public DialogButtonClickedEvent(@NotNull Player player, @NotNull String dialogId, @NotNull String buttonId) { public DialogButtonClickedEvent(@NotNull Player player, @NotNull String dialogId, @NotNull String buttonId, @NotNull Map<String, String> payload) {
super(!Bukkit.isPrimaryThread()); super(!Bukkit.isPrimaryThread());
this.player = player; this.player = player;
this.dialogId = dialogId; this.dialogId = dialogId;
this.buttonId = buttonId; this.buttonId = buttonId;
this.payload = payload;
} }
public static HandlerList getHandlerList() { public static HandlerList getHandlerList() {
@@ -37,6 +41,10 @@ public class DialogButtonClickedEvent extends Event {
return buttonId; return buttonId;
} }
public Map<String, String> getPayload() {
return payload;
}
@Override @Override
public @NotNull HandlerList getHandlers() { public @NotNull HandlerList getHandlers() {
return handlerList; return handlerList;

View File

@@ -1,9 +1,9 @@
package com.fancyinnovations.fancydialogs.commands; package com.fancyinnovations.fancydialogs.commands;
import com.fancyinnovations.fancydialogs.FancyDialogsPlugin; import com.fancyinnovations.fancydialogs.FancyDialogsPlugin;
import com.fancyinnovations.fancydialogs.api.ConfirmationDialog;
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.api.dialogs.ConfirmationDialog;
import com.fancyinnovations.fancydialogs.config.FancyDialogsConfig; import com.fancyinnovations.fancydialogs.config.FancyDialogsConfig;
import com.fancyinnovations.fancydialogs.dialog.DialogImpl; import com.fancyinnovations.fancydialogs.dialog.DialogImpl;
import de.oliver.fancyanalytics.logger.LogLevel; import de.oliver.fancyanalytics.logger.LogLevel;

View File

@@ -46,7 +46,7 @@ public class CustomClickActionPacketListener {
String dialogId = packet.getPayload().get("dialog_id"); String dialogId = packet.getPayload().get("dialog_id");
String buttonId = packet.getPayload().get("button_id"); String buttonId = packet.getPayload().get("button_id");
new DialogButtonClickedEvent(event.player(), dialogId, buttonId).callEvent(); new DialogButtonClickedEvent(event.player(), dialogId, buttonId, packet.getPayload()).callEvent();
if (dialogId.startsWith("confirmation_dialog_")) { if (dialogId.startsWith("confirmation_dialog_")) {
return; // Ignore confirmation dialog actions, handled separately return; // Ignore confirmation dialog actions, handled separately

View File

@@ -1,6 +1,7 @@
package com.fancyinnovations.fancydialogs.listener; package com.fancyinnovations.fancydialogs.listener;
import com.fancyinnovations.fancydialogs.api.ConfirmationDialog; import com.fancyinnovations.fancydialogs.FancyDialogsPlugin;
import com.fancyinnovations.fancydialogs.api.dialogs.ConfirmationDialog;
import com.fancyinnovations.fancydialogs.api.events.DialogButtonClickedEvent; import com.fancyinnovations.fancydialogs.api.events.DialogButtonClickedEvent;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@@ -16,6 +17,21 @@ public class DialogButtonClickedListener implements Listener {
} }
if (event.getButtonId().equals(dialog.getConfirmButtonId())) { if (event.getButtonId().equals(dialog.getConfirmButtonId())) {
if (dialog.getExpectedUserInput() != null && !dialog.getExpectedUserInput().isEmpty()) {
if (!event.getPayload().containsKey("confirmation_user_input")) {
FancyDialogsPlugin.get().getFancyLogger().warn("Confirmation dialog expected user input but none was provided.");
return;
}
String userInput = event.getPayload().get("confirmation_user_input");
if (!userInput.equals(dialog.getExpectedUserInput())) {
FancyDialogsPlugin.get().getTranslator()
.translate("confirmation_dialog.input_mismatch")
.send(event.getPlayer());
return;
}
}
dialog.getOnConfirm().run(); dialog.getOnConfirm().run();
ConfirmationDialog.CACHE.remove(event.getDialogId()); ConfirmationDialog.CACHE.remove(event.getDialogId());
} else if (event.getButtonId().equals(dialog.getCancelButtonId())) { } else if (event.getButtonId().equals(dialog.getCancelButtonId())) {

View File

@@ -2,6 +2,8 @@ language_name: default
messages: messages:
dialog: dialog:
not_found: "<dark_gray> <gray>Dialog {warningColor}{id}<gray> is not registered." not_found: "<dark_gray> <gray>Dialog {warningColor}{id}<gray> is not registered."
confirmation_dialog:
input_mismatch: "<dark_gray> <gray>Your input does not match the expected phrase."
commands: commands:
dialog: dialog:
open: open:

View File

@@ -1 +1 @@
2.8.0.156 2.8.0.157

View File

@@ -1 +1 @@
3.0.0-SNAPSHOT.8 3.0.0-SNAPSHOT.9

View File

@@ -1 +1 @@
2.8.0.303 2.8.0.306

View File

@@ -81,6 +81,7 @@ public class FancyNpcs extends JavaPlugin implements FancyNpcsPlugin {
public static final FeatureFlag PLAYER_NPCS_FEATURE_FLAG = new FeatureFlag("player-npcs", "Every player can only manage the npcs they have created", false); public static final FeatureFlag PLAYER_NPCS_FEATURE_FLAG = new FeatureFlag("player-npcs", "Every player can only manage the npcs they have created", false);
public static final FeatureFlag USE_NATIVE_THREADS_FEATURE_FLAG = new FeatureFlag("use-native-threads", "Use native threads instead of virtual threads.", false); public static final FeatureFlag USE_NATIVE_THREADS_FEATURE_FLAG = new FeatureFlag("use-native-threads", "Use native threads instead of virtual threads.", false);
public static final FeatureFlag ENABLE_DEBUG_MODE_FEATURE_FLAG = new FeatureFlag("enable-debug-mode", "Enable debug mode", false); public static final FeatureFlag ENABLE_DEBUG_MODE_FEATURE_FLAG = new FeatureFlag("enable-debug-mode", "Enable debug mode", false);
public static final FeatureFlag USE_MINECRAFT_USERCACHE_FEATURE_FLAG = new FeatureFlag("use-minecraft-usercache", "Include the content of usercache.json to the username->uuid cache", false);
private static FancyNpcs instance; private static FancyNpcs instance;
private final ExtendedFancyLogger fancyLogger; private final ExtendedFancyLogger fancyLogger;

View File

@@ -55,6 +55,10 @@ public class UUIDFileCache implements UUIDCache {
} }
private void loadMinecraftUsercache() { private void loadMinecraftUsercache() {
if (!FancyNpcs.USE_MINECRAFT_USERCACHE_FEATURE_FLAG.isEnabled()) {
return;
}
if (!usercacheFile.exists()) { if (!usercacheFile.exists()) {
FancyNpcs.getInstance().getFancyLogger().debug("Minecraft usercache file does not exist, skipping load."); FancyNpcs.getInstance().getFancyLogger().debug("Minecraft usercache file does not exist, skipping load.");
return; return;