feat: implemented 'script' action for dialogues
This commit is contained in:
parent
bc9ca3113c
commit
2fe9109178
@ -12,6 +12,7 @@ import ru.dragonestia.msb3.api.command.DebugCommands;
|
||||
import ru.dragonestia.msb3.api.dialog.DialogRegistry;
|
||||
import ru.dragonestia.msb3.api.dialog.action.CloseDialogActionHandler;
|
||||
import ru.dragonestia.msb3.api.dialog.action.DialogDialogActionHandler;
|
||||
import ru.dragonestia.msb3.api.dialog.action.ScriptDialogActionHandler;
|
||||
import ru.dragonestia.msb3.api.dialog.condition.AlwaysDialogConditionHandler;
|
||||
import ru.dragonestia.msb3.api.dialog.condition.NeverDialogConditionHandler;
|
||||
import ru.dragonestia.msb3.api.entity.PickableItem;
|
||||
@ -203,6 +204,7 @@ public final class ServerBootstrap {
|
||||
private void initDefaultDialogActionsAndConditions() {
|
||||
DialogRegistry.registerActionHandler("close", new CloseDialogActionHandler());
|
||||
DialogRegistry.registerActionHandler("dialog", new DialogDialogActionHandler());
|
||||
DialogRegistry.registerActionHandler("script", new ScriptDialogActionHandler());
|
||||
|
||||
DialogRegistry.registerConditionHandler("always", new AlwaysDialogConditionHandler());
|
||||
DialogRegistry.registerConditionHandler("never", new NeverDialogConditionHandler());
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
package ru.dragonestia.msb3.api.dialog.action;
|
||||
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import ru.dragonestia.msb3.api.debug.DebugMessage;
|
||||
import ru.dragonestia.msb3.api.dialog.DialogButtonClick;
|
||||
import ru.dragonestia.msb3.api.script.ScriptRegistry;
|
||||
import ru.dragonestia.msb3.api.script.ScriptService;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Log4j2
|
||||
public class ScriptDialogActionHandler implements DialogActionHandler {
|
||||
|
||||
@Override
|
||||
public void handle(DialogButtonClick click, Map<String, String> params) {
|
||||
var player = click.player();
|
||||
var scriptId = params.get("scriptId");
|
||||
if (scriptId == null) {
|
||||
DebugMessage.sendError(player, "Отсутствует обязательный параметр scriptId для команды script");
|
||||
return;
|
||||
}
|
||||
|
||||
var script = ScriptRegistry.findAndCreateScript(scriptId);
|
||||
if (script.isEmpty()) {
|
||||
log.error("Script {} not found", scriptId);
|
||||
DebugMessage.sendError(player, "Скрипт с идентификатором %s не найден".formatted(scriptId));
|
||||
return;
|
||||
}
|
||||
|
||||
ScriptService.ofPlayer(player).start(script.get());
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user