From bdb1aed40cd31fdd0bc96e4b6f812af2c546036a Mon Sep 17 00:00:00 2001 From: BlueTree242 Date: Mon, 22 Apr 2024 10:37:26 +0200 Subject: [PATCH 1/9] Add GeyserCustomPayloadEvent --- .../event/java/GeyserCustomPayloadEvent.java | 66 +++++++++++++++++++ .../java/JavaCustomPayloadTranslator.java | 6 ++ 2 files changed, 72 insertions(+) create mode 100644 api/src/main/java/org/geysermc/geyser/api/event/java/GeyserCustomPayloadEvent.java diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/GeyserCustomPayloadEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/GeyserCustomPayloadEvent.java new file mode 100644 index 000000000..92f9899c7 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/GeyserCustomPayloadEvent.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.java; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.connection.GeyserConnection; +import org.geysermc.geyser.api.event.connection.ConnectionEvent; + +/** + * Called when the java server sends a custom payload to geyser. + * An extension/addon can use this event to translate this. + * This event is not called when a built-in supported custom payload + * such as floodgate is received. + */ +public class GeyserCustomPayloadEvent extends ConnectionEvent { + + private final String channel; + private final byte[] data; + + public GeyserCustomPayloadEvent(@NonNull GeyserConnection connection, @NonNull String channel, byte[] data) { + super(connection); + this.channel = channel; + this.data = data; + } + + /** + * The channel that sent this custom payload. + * A channel would look something like this: + * minecraft:register. + * @return the channel that sent this custom payload. + */ + public @NonNull String getChannel() { + return channel; + } + + /** + * The data field of the custom payload. + * @return the data field of the custom payload. + */ + public byte[] getData() { + return data; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index 2a7202b0c..a3fddb211 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -42,6 +42,7 @@ import org.geysermc.erosion.packet.geyserbound.GeyserboundPacket; import org.geysermc.floodgate.pluginmessage.PluginMessageChannels; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; +import org.geysermc.geyser.api.event.java.GeyserCustomPayloadEvent; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -138,6 +139,11 @@ public class JavaCustomPayloadTranslator extends PacketTranslator Date: Mon, 22 Apr 2024 10:39:34 +0200 Subject: [PATCH 2/9] Rename to ServerCustomPayloadEvent --- ...rCustomPayloadEvent.java => ServerCustomPayloadEvent.java} | 4 ++-- .../translator/protocol/java/JavaCustomPayloadTranslator.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename api/src/main/java/org/geysermc/geyser/api/event/java/{GeyserCustomPayloadEvent.java => ServerCustomPayloadEvent.java} (94%) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/GeyserCustomPayloadEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java similarity index 94% rename from api/src/main/java/org/geysermc/geyser/api/event/java/GeyserCustomPayloadEvent.java rename to api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java index 92f9899c7..bd87e3819 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/java/GeyserCustomPayloadEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java @@ -35,12 +35,12 @@ import org.geysermc.geyser.api.event.connection.ConnectionEvent; * This event is not called when a built-in supported custom payload * such as floodgate is received. */ -public class GeyserCustomPayloadEvent extends ConnectionEvent { +public class ServerCustomPayloadEvent extends ConnectionEvent { private final String channel; private final byte[] data; - public GeyserCustomPayloadEvent(@NonNull GeyserConnection connection, @NonNull String channel, byte[] data) { + public ServerCustomPayloadEvent(@NonNull GeyserConnection connection, @NonNull String channel, byte[] data) { super(connection); this.channel = channel; this.data = data; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index a3fddb211..59054bee7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -42,7 +42,7 @@ import org.geysermc.erosion.packet.geyserbound.GeyserboundPacket; import org.geysermc.floodgate.pluginmessage.PluginMessageChannels; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; -import org.geysermc.geyser.api.event.java.GeyserCustomPayloadEvent; +import org.geysermc.geyser.api.event.java.ServerCustomPayloadEvent; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -142,7 +142,7 @@ public class JavaCustomPayloadTranslator extends PacketTranslator Date: Mon, 22 Apr 2024 14:05:35 +0200 Subject: [PATCH 3/9] Java and Geyser should be uppercase Co-authored-by: chris --- .../geyser/api/event/java/ServerCustomPayloadEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java index bd87e3819..01dbb2f6a 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java @@ -30,7 +30,7 @@ import org.geysermc.geyser.api.connection.GeyserConnection; import org.geysermc.geyser.api.event.connection.ConnectionEvent; /** - * Called when the java server sends a custom payload to geyser. + * Called when the Java server sends a custom payload to Geyser. * An extension/addon can use this event to translate this. * This event is not called when a built-in supported custom payload * such as floodgate is received. From cf8d3184096b3603d100d59cd0c60886ea1c455f Mon Sep 17 00:00:00 2001 From: Blue Tree <69328929+BlueTree242@users.noreply.github.com> Date: Mon, 22 Apr 2024 14:06:00 +0200 Subject: [PATCH 4/9] Remove javadoc comment about using the event to translate as it is not clear Co-authored-by: chris --- .../geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java index 01dbb2f6a..ffbdfc355 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java @@ -31,7 +31,6 @@ import org.geysermc.geyser.api.event.connection.ConnectionEvent; /** * Called when the Java server sends a custom payload to Geyser. - * An extension/addon can use this event to translate this. * This event is not called when a built-in supported custom payload * such as floodgate is received. */ From 987c440fae4fa065497cf3a539e84a388a289b69 Mon Sep 17 00:00:00 2001 From: Blue Tree <69328929+BlueTree242@users.noreply.github.com> Date: Mon, 22 Apr 2024 14:06:47 +0200 Subject: [PATCH 5/9] Apply suggestions from code review Co-authored-by: chris --- .../geyser/api/event/java/ServerCustomPayloadEvent.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java index ffbdfc355..09fce096f 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java @@ -32,7 +32,7 @@ import org.geysermc.geyser.api.event.connection.ConnectionEvent; /** * Called when the Java server sends a custom payload to Geyser. * This event is not called when a built-in supported custom payload - * such as floodgate is received. + * such as Floodgate is received. */ public class ServerCustomPayloadEvent extends ConnectionEvent { @@ -51,7 +51,7 @@ public class ServerCustomPayloadEvent extends ConnectionEvent { * minecraft:register. * @return the channel that sent this custom payload. */ - public @NonNull String getChannel() { + public @NonNull String channel() { return channel; } @@ -59,7 +59,7 @@ public class ServerCustomPayloadEvent extends ConnectionEvent { * The data field of the custom payload. * @return the data field of the custom payload. */ - public byte[] getData() { + public byte[] data() { return data; } } From 1e18d51d189d89be924c57aac20266308c3fb0d6 Mon Sep 17 00:00:00 2001 From: BlueTree242 Date: Mon, 22 Apr 2024 14:07:22 +0200 Subject: [PATCH 6/9] inline event creation & firing --- .../translator/protocol/java/JavaCustomPayloadTranslator.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index 59054bee7..9b261a7b4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -141,9 +141,7 @@ public class JavaCustomPayloadTranslator extends PacketTranslator Date: Mon, 22 Apr 2024 14:18:56 +0200 Subject: [PATCH 7/9] Avoid using var --- .../translator/protocol/java/JavaCustomPayloadTranslator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index 9b261a7b4..af8713bb5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -42,6 +42,7 @@ import org.geysermc.erosion.packet.geyserbound.GeyserboundPacket; import org.geysermc.floodgate.pluginmessage.PluginMessageChannels; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; +import org.geysermc.geyser.api.event.EventBus; import org.geysermc.geyser.api.event.java.ServerCustomPayloadEvent; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; @@ -140,7 +141,7 @@ public class JavaCustomPayloadTranslator extends PacketTranslator Date: Mon, 22 Apr 2024 14:19:33 +0200 Subject: [PATCH 8/9] Remove the word "supported" from "built-in supported custom payload" --- .../geyser/api/event/java/ServerCustomPayloadEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java index 09fce096f..a6232545b 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/java/ServerCustomPayloadEvent.java @@ -31,7 +31,7 @@ import org.geysermc.geyser.api.event.connection.ConnectionEvent; /** * Called when the Java server sends a custom payload to Geyser. - * This event is not called when a built-in supported custom payload + * This event is not called when a built-in custom payload * such as Floodgate is received. */ public class ServerCustomPayloadEvent extends ConnectionEvent { From a1a2959f0303795e791e2d772a531f170d71947c Mon Sep 17 00:00:00 2001 From: BlueTree242 Date: Mon, 22 Apr 2024 15:50:40 +0200 Subject: [PATCH 9/9] Wrap firing ServerCustomPayloadEvent in ensureInEventLoop --- .../protocol/java/JavaCustomPayloadTranslator.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index af8713bb5..9344ee947 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -141,8 +141,10 @@ public class JavaCustomPayloadTranslator extends PacketTranslator { + EventBus eventBus = session.getGeyser().eventBus(); + eventBus.fire(new ServerCustomPayloadEvent(session, channel, packet.getData())); + }); } }