packets: Add support for custom actions

This commit is contained in:
Oliver
2025-06-15 17:10:55 +02:00
committed by Oliver
parent c20617b2e2
commit 8c569f90d5
2 changed files with 53 additions and 4 deletions

View File

@@ -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<CompoundTag> 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<Action> optionalAction = action != null ?
Optional.of(action) :
Optional.empty();

View File

@@ -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;
}
}