diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java index 6f7d180de..9985e1e48 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java @@ -52,9 +52,15 @@ public class FormCache { return windowId; } - public int showForm(Form form) { + public void showForm(Form form) { int windowId = addForm(form); + if (session.getUpstream().isInitialized()) { + sendForm(windowId, form); + } + } + + private void sendForm(int windowId, Form form) { ModalFormRequestPacket formRequestPacket = new ModalFormRequestPacket(); formRequestPacket.setFormId(windowId); formRequestPacket.setFormData(form.getJsonData()); @@ -68,8 +74,12 @@ public class FormCache { session.scheduleInEventLoop(() -> session.sendUpstreamPacket(latencyPacket), 500, TimeUnit.MILLISECONDS); } + } - return windowId; + public void resendAllForms() { + for (Int2ObjectMap.Entry
entry : forms.int2ObjectEntrySet()) { + sendForm(entry.getIntKey(), entry.getValue()); + } } public void handleResponse(ModalFormResponsePacket response) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java index a2c0806b0..06495b638 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java @@ -55,6 +55,9 @@ public class BedrockSetLocalPlayerAsInitializedTranslator extends PacketTranslat if (session.getOpenInventory() != null && session.getOpenInventory().isPending()) { InventoryUtils.openInventory(session, session.getOpenInventory()); } + + // What am I to expect - as of Bedrock 1.18 + session.getFormCache().resendAllForms(); } } }