diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/form/element/NpcDialogueButton.java b/common/src/main/java/me/zimzaza4/geyserutils/common/form/element/NpcDialogueButton.java index b637b1e..924387e 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/form/element/NpcDialogueButton.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/form/element/NpcDialogueButton.java @@ -15,7 +15,7 @@ public class NpcDialogueButton { private String text; private List commands; private ButtonMode mode; - + private boolean hasNextForm; public enum ButtonMode { BUTTON_MODE, ON_ENTER, diff --git a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java index 2bed535..5d4b51c 100644 --- a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java +++ b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java @@ -1,7 +1,7 @@ package me.zimzaza4.geyserutils.geyser; -import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundCustomPayloadPacket; -import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundCustomPayloadPacket; +import com.github.steveice10.mc.protocol.packet.common.clientbound.ClientboundCustomPayloadPacket; +import com.github.steveice10.mc.protocol.packet.common.serverbound.ServerboundCustomPayloadPacket; import com.github.steveice10.packetlib.Session; import com.github.steveice10.packetlib.event.session.SessionAdapter; import com.github.steveice10.packetlib.packet.Packet; @@ -112,8 +112,7 @@ public class GeyserUtils implements Extension { if (button.mode() == NpcDialogueButton.ButtonMode.BUTTON_MODE) { session.sendDownstreamPacket(new ServerboundCustomPayloadPacket(GeyserUtilsChannels.MAIN, packetManager.encodePacket(new NpcFormResponseCustomPayloadPacket(formData.formId(), finalI)))); } - } - )); + }, button.hasNextForm())); i++; } } diff --git a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/form/element/Button.java b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/form/element/Button.java index e194c17..41067c2 100644 --- a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/form/element/Button.java +++ b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/form/element/Button.java @@ -16,8 +16,7 @@ public class Button { List commands; NpcDialogueButton.ButtonMode mode; Runnable click; - - + boolean hasNextForm; public JsonObject toJsonObject() { JsonObject button = new JsonObject(); diff --git a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/translator/NPCFormResponseTranslator.java b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/translator/NPCFormResponseTranslator.java index cfaf013..a2b34c1 100644 --- a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/translator/NPCFormResponseTranslator.java +++ b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/translator/NPCFormResponseTranslator.java @@ -15,35 +15,36 @@ public class NPCFormResponseTranslator extends PacketTranslator handler = NpcDialogueForm.FORMS.get(response.getFormId()).handler(); - if (handler != null) { - handler.accept(response.getFormId(), response.getButtonId()); - } - NpcDialogueForm.FORMS.remove(response.getFormId()); - } + NpcDialogueForm form = NpcDialogueForm.FORMS.get(response.getFormId()); + if (form.handler() != null) { + if (response.getButtonId() != -1) { + form.handler().accept(response.getFormId(), response.getButtonId()); + } + } + if (response.getButtonId() == -1) { + if (form.closeHandler() != null) { + form.closeHandler().accept(response.getFormId()); + } + NpcDialogueForm.FORMS.remove(response.getFormId()); + } + + + } } } }); diff --git a/spigot/src/main/java/me/zimzaza4/geyserutils/spigot/api/form/NpcDialogueForm.java b/spigot/src/main/java/me/zimzaza4/geyserutils/spigot/api/form/NpcDialogueForm.java index 0961a5f..9d11dc7 100644 --- a/spigot/src/main/java/me/zimzaza4/geyserutils/spigot/api/form/NpcDialogueForm.java +++ b/spigot/src/main/java/me/zimzaza4/geyserutils/spigot/api/form/NpcDialogueForm.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; import java.util.function.BiConsumer; +import java.util.function.Consumer; @NoArgsConstructor @AllArgsConstructor @@ -38,6 +39,7 @@ public class NpcDialogueForm { boolean hasNextForm = false; List buttons; BiConsumer handler; + Consumer closeHandler; public void send(FloodgatePlayer floodgatePlayer) { UUID formId = UUID.randomUUID();