From 8c569f90d51e3b4ef1426a9f65f997e360ecd918 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 15 Jun 2025 17:10:55 +0200 Subject: [PATCH] packets: Add support for custom actions --- .../ClientboundShowDialogPacketImpl.java | 25 ++++++++++++--- .../actions/FS_DialogCustomAction.java | 32 +++++++++++++++++++ 2 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/actions/FS_DialogCustomAction.java diff --git a/libraries/packets/implementations/1_21_6/src/main/java/de/oliver/fancysitula/versions/v1_21_6/packets/ClientboundShowDialogPacketImpl.java b/libraries/packets/implementations/1_21_6/src/main/java/de/oliver/fancysitula/versions/v1_21_6/packets/ClientboundShowDialogPacketImpl.java index c56a922f..0d78c796 100644 --- a/libraries/packets/implementations/1_21_6/src/main/java/de/oliver/fancysitula/versions/v1_21_6/packets/ClientboundShowDialogPacketImpl.java +++ b/libraries/packets/implementations/1_21_6/src/main/java/de/oliver/fancysitula/versions/v1_21_6/packets/ClientboundShowDialogPacketImpl.java @@ -5,7 +5,7 @@ import de.oliver.fancysitula.api.dialogs.FS_Dialog; import de.oliver.fancysitula.api.dialogs.FS_DialogAction; import de.oliver.fancysitula.api.dialogs.actions.FS_CommonButtonData; import de.oliver.fancysitula.api.dialogs.actions.FS_DialogActionButton; -import de.oliver.fancysitula.api.dialogs.actions.FS_DialogRunCommandAction; +import de.oliver.fancysitula.api.dialogs.actions.FS_DialogCustomAction; import de.oliver.fancysitula.api.dialogs.body.FS_DialogBody; import de.oliver.fancysitula.api.dialogs.body.FS_DialogItemBody; import de.oliver.fancysitula.api.dialogs.body.FS_DialogTextBody; @@ -21,14 +21,17 @@ import de.oliver.fancysitula.api.entities.FS_RealPlayer; import de.oliver.fancysitula.api.packets.FS_ClientboundShowDialogPacket; import de.oliver.fancysitula.versions.v1_21_6.utils.VanillaPlayerAdapter; import io.papermc.paper.adventure.PaperAdventure; +import net.kyori.adventure.key.Key; import net.kyori.adventure.text.minimessage.MiniMessage; import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.common.ClientboundShowDialogPacket; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.dialog.*; import net.minecraft.server.dialog.action.Action; -import net.minecraft.server.dialog.action.CommandTemplate; +import net.minecraft.server.dialog.action.CustomAll; import net.minecraft.server.dialog.body.DialogBody; import net.minecraft.server.dialog.body.ItemBody; import net.minecraft.server.dialog.body.PlainMessage; @@ -235,10 +238,24 @@ public class ClientboundShowDialogPacketImpl extends FS_ClientboundShowDialogPac CommonButtonData buttonData = commonButtonDataToNms(actionButton.getButtonData()); Action action = null; - if (actionButton.getAction() instanceof FS_DialogRunCommandAction runCommandAction) { - action = new CommandTemplate(null); // TODO: Fix this + if (actionButton.getAction() instanceof FS_DialogCustomAction customAction) { + Key idKey = Key.key("fancysitula", customAction.getId()); + ResourceLocation idLocation = PaperAdventure.asVanilla(idKey); + + Optional additions; + if (customAction.getAdditions() != null) { + CompoundTag tag = new CompoundTag(); + tag.putString("additions", customAction.getAdditions()); + additions = Optional.of(tag); + } else { + additions = Optional.empty(); + } + + action = new CustomAll(idLocation, additions); } + // TODO add support for run command action + Optional optionalAction = action != null ? Optional.of(action) : Optional.empty(); diff --git a/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/actions/FS_DialogCustomAction.java b/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/actions/FS_DialogCustomAction.java new file mode 100644 index 00000000..5da567e3 --- /dev/null +++ b/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/actions/FS_DialogCustomAction.java @@ -0,0 +1,32 @@ +package de.oliver.fancysitula.api.dialogs.actions; + +import org.intellij.lang.annotations.Subst; +import org.jetbrains.annotations.Nullable; + +public class FS_DialogCustomAction implements FS_DialogActionButtonAction { + + private String id; + private @Nullable String additions; + + public FS_DialogCustomAction(String id, String additions) { + this.id = id; + this.additions = additions; + } + + @Subst("") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public @Nullable String getAdditions() { + return additions; + } + + public void setAdditions(@Nullable String additions) { + this.additions = additions; + } +}