From d8c3feaacfeb475d40bbd3d4755ceadd30535fbc Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sun, 10 Sep 2023 13:40:49 +0800 Subject: [PATCH] Initial commit --- .gitignore | 38 +++++ .idea/.gitignore | 3 + .idea/encodings.xml | 15 ++ .idea/misc.xml | 24 +++ .idea/uiDesigner.xml | 124 +++++++++++++++ common/pom.xml | 28 ++++ .../common/channel/GeyserUtilsChannels.java | 5 + .../form/element/NpcDialogueButton.java | 25 +++ .../common/packet/CameraShakePacket.java | 14 ++ .../packet/NpcDialogueFormDataPacket.java | 27 ++++ .../common/packet/NpcFormResponsePacket.java | 15 ++ .../geyserutils/common/packet/Packet.java | 7 + .../common/util/CustomPayloadPacketUtils.java | 30 ++++ geyser/pom.xml | 99 ++++++++++++ .../geyserutils/geyser/GeyserUtils.java | 105 +++++++++++++ .../geyser/form/NpcDialogueForm.java | 143 ++++++++++++++++++ .../geyser/form/NpcDialogueForms.java | 29 ++++ .../geyser/form/element/Button.java | 43 ++++++ .../translator/NPCFormResponseTranslator.java | 50 ++++++ geyser/src/main/resources/extension.yml | 6 + pom.xml | 24 +++ spigot/pom.xml | 86 +++++++++++ .../geyserutils/spigot/GeyserUtils.java | 51 +++++++ .../geyserutils/spigot/api/PlayerUtils.java | 18 +++ .../spigot/api/form/NpcDialogueForm.java | 74 +++++++++ spigot/src/main/resources/plugin.yml | 3 + velocity/pom.xml | 103 +++++++++++++ .../geyserutils/velocity/GeyserUtils.java | 33 ++++ 28 files changed, 1222 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 common/pom.xml create mode 100644 common/src/main/java/me/zimzaza4/geyserutils/common/channel/GeyserUtilsChannels.java create mode 100644 common/src/main/java/me/zimzaza4/geyserutils/common/form/element/NpcDialogueButton.java create mode 100644 common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraShakePacket.java create mode 100644 common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcDialogueFormDataPacket.java create mode 100644 common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcFormResponsePacket.java create mode 100644 common/src/main/java/me/zimzaza4/geyserutils/common/packet/Packet.java create mode 100644 common/src/main/java/me/zimzaza4/geyserutils/common/util/CustomPayloadPacketUtils.java create mode 100644 geyser/pom.xml create mode 100644 geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java create mode 100644 geyser/src/main/java/me/zimzaza4/geyserutils/geyser/form/NpcDialogueForm.java create mode 100644 geyser/src/main/java/me/zimzaza4/geyserutils/geyser/form/NpcDialogueForms.java create mode 100644 geyser/src/main/java/me/zimzaza4/geyserutils/geyser/form/element/Button.java create mode 100644 geyser/src/main/java/me/zimzaza4/geyserutils/geyser/translator/NPCFormResponseTranslator.java create mode 100644 geyser/src/main/resources/extension.yml create mode 100644 pom.xml create mode 100644 spigot/pom.xml create mode 100644 spigot/src/main/java/me/zimzaza4/geyserutils/spigot/GeyserUtils.java create mode 100644 spigot/src/main/java/me/zimzaza4/geyserutils/spigot/api/PlayerUtils.java create mode 100644 spigot/src/main/java/me/zimzaza4/geyserutils/spigot/api/form/NpcDialogueForm.java create mode 100644 spigot/src/main/resources/plugin.yml create mode 100644 velocity/pom.xml create mode 100644 velocity/src/main/java/me/zimzaza4/geyserutils/velocity/GeyserUtils.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..359bb53 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..91a6212 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..187706b --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..ed6ba1b --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + me.zimzaza4 + GeyserUtils + 1.0-SNAPSHOT + + + geyserutils-common + + + 11 + 11 + UTF-8 + + + + org.projectlombok + lombok + 1.18.28 + compile + + + + \ No newline at end of file diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/channel/GeyserUtilsChannels.java b/common/src/main/java/me/zimzaza4/geyserutils/common/channel/GeyserUtilsChannels.java new file mode 100644 index 0000000..d218c69 --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/channel/GeyserUtilsChannels.java @@ -0,0 +1,5 @@ +package me.zimzaza4.geyserutils.common.channel; + +public class GeyserUtilsChannels { + public static final String MAIN = "geyserutils:main"; +} 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 new file mode 100644 index 0000000..e3a6c42 --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/form/element/NpcDialogueButton.java @@ -0,0 +1,25 @@ +package me.zimzaza4.geyserutils.common.form.element; + +import lombok.Getter; +import lombok.Setter; +import lombok.Value; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +@Setter +@Getter +@Accessors( fluent = true ) +public class NpcDialogueButton implements Serializable { + private String text; + private List commands; + private ButtonMode mode; + + public enum ButtonMode { + BUTTON_MODE, + ON_ENTER, + ON_EXIT + } + +} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraShakePacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraShakePacket.java new file mode 100644 index 0000000..1e41ec3 --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraShakePacket.java @@ -0,0 +1,14 @@ +package me.zimzaza4.geyserutils.common.packet; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CameraShakePacket extends Packet { + + float intensity; + float duration; + int type; + +} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcDialogueFormDataPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcDialogueFormDataPacket.java new file mode 100644 index 0000000..34ed516 --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcDialogueFormDataPacket.java @@ -0,0 +1,27 @@ +package me.zimzaza4.geyserutils.common.packet; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; +import me.zimzaza4.geyserutils.common.form.element.NpcDialogueButton; + +import java.io.Serializable; +import java.util.List; + +@AllArgsConstructor +@Accessors(fluent = true) +@Getter +@Setter +public class NpcDialogueFormDataPacket extends Packet { + + String formId; + String title; + String dialogue; + String skinData; + int bindEntity; + List buttons; + String action; + boolean hasNextForm; + +} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcFormResponsePacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcFormResponsePacket.java new file mode 100644 index 0000000..cc9e3e6 --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcFormResponsePacket.java @@ -0,0 +1,15 @@ +package me.zimzaza4.geyserutils.common.packet; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class NpcFormResponsePacket extends Packet { + String formId; + int buttonId; +} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/Packet.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/Packet.java new file mode 100644 index 0000000..13a90fd --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/Packet.java @@ -0,0 +1,7 @@ +package me.zimzaza4.geyserutils.common.packet; + +import java.io.Serializable; + +public abstract class Packet implements Serializable { + +} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/util/CustomPayloadPacketUtils.java b/common/src/main/java/me/zimzaza4/geyserutils/common/util/CustomPayloadPacketUtils.java new file mode 100644 index 0000000..95183ef --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/util/CustomPayloadPacketUtils.java @@ -0,0 +1,30 @@ +package me.zimzaza4.geyserutils.common.util; + +import me.zimzaza4.geyserutils.common.packet.Packet; + +import java.io.*; + +public class CustomPayloadPacketUtils { + + public static byte[] encodePacket(Packet packet) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + try (ObjectOutputStream outputStream = new ObjectOutputStream(byteArrayOutputStream)) { + outputStream.writeObject(packet); + outputStream.flush(); + return byteArrayOutputStream.toByteArray(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + + public static Packet decodePacket(byte[] bytes) { + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); + try (ObjectInputStream inputStream = new ObjectInputStream(byteArrayInputStream)) { + return (Packet) inputStream.readObject(); + } catch (IOException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/geyser/pom.xml b/geyser/pom.xml new file mode 100644 index 0000000..aeb4aac --- /dev/null +++ b/geyser/pom.xml @@ -0,0 +1,99 @@ + + + 4.0.0 + + me.zimzaza4 + GeyserUtils + 1.0-SNAPSHOT + + + geyserutils-geyser + + + 17 + 17 + UTF-8 + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.4.1 + + + package + + shade + + + false + + + + + + + + src/main/resources + true + + + + + + + + opencollab-release-repo + https://repo.opencollab.dev/maven-releases/ + + true + + + false + + + + opencollab-snapshot-repo + https://repo.opencollab.dev/maven-snapshots/ + + false + + + true + + + + sonatype-oss-snapshots1 + https://s01.oss.sonatype.org/content/repositories/snapshots/ + + + jitpack.io + https://jitpack.io + + + + + org.geysermc.geyser + api + 2.1.2-SNAPSHOT + provided + + + org.geysermc.geyser + core + 2.1.2-SNAPSHOT + provided + + + me.zimzaza4 + geyserutils-common + 1.0-SNAPSHOT + compile + + + + \ No newline at end of file diff --git a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java new file mode 100644 index 0000000..eedac3a --- /dev/null +++ b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java @@ -0,0 +1,105 @@ +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.packetlib.Session; +import com.github.steveice10.packetlib.event.session.SessionAdapter; +import com.github.steveice10.packetlib.packet.Packet; +import me.zimzaza4.geyserutils.common.channel.GeyserUtilsChannels; +import me.zimzaza4.geyserutils.common.form.element.NpcDialogueButton; +import me.zimzaza4.geyserutils.common.packet.CameraShakePacket; +import me.zimzaza4.geyserutils.common.packet.NpcDialogueFormDataPacket; +import me.zimzaza4.geyserutils.common.packet.NpcFormResponsePacket; +import me.zimzaza4.geyserutils.common.util.CustomPayloadPacketUtils; +import me.zimzaza4.geyserutils.geyser.form.NpcDialogueForm; +import me.zimzaza4.geyserutils.geyser.form.NpcDialogueForms; +import me.zimzaza4.geyserutils.geyser.form.element.Button; +import me.zimzaza4.geyserutils.geyser.translator.NPCFormResponseTranslator; +import org.cloudburstmc.protocol.bedrock.packet.NpcRequestPacket; +import org.geysermc.event.subscribe.Subscribe; +import org.geysermc.geyser.api.bedrock.camera.CameraShake; +import org.geysermc.geyser.api.event.bedrock.SessionJoinEvent; +import org.geysermc.geyser.api.event.lifecycle.GeyserPostInitializeEvent; +import org.geysermc.geyser.api.extension.Extension; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.session.GeyserSession; + +import java.util.ArrayList; +import java.util.List; + +public class GeyserUtils implements Extension { + + @Subscribe + public void onLoad(GeyserPostInitializeEvent event) { + Registries.BEDROCK_PACKET_TRANSLATORS.register(NpcRequestPacket.class, new NPCFormResponseTranslator()); + } + @Subscribe + public void onSessionJoin(SessionJoinEvent event) { + if (event.connection() instanceof GeyserSession session) { + System.out.println("Add"); + session.getDownstream().getSession().addListener(new SessionAdapter() { + @Override + public void packetReceived(Session tcpSession, Packet packet) { + if (packet instanceof ClientboundCustomPayloadPacket payloadPacket) { + System.out.println(payloadPacket.getChannel()); + if (payloadPacket.getChannel().equals(GeyserUtilsChannels.MAIN)) { + System.out.println("Received packet"); + me.zimzaza4.geyserutils.common.packet.Packet customPacket = CustomPayloadPacketUtils.decodePacket(payloadPacket.getData()); + System.out.println(1); + if (customPacket instanceof CameraShakePacket cameraShakePacket) { + System.out.println(2); + event.connection().shakeCamera(cameraShakePacket.getIntensity(), cameraShakePacket.getDuration(), CameraShake.values()[cameraShakePacket.getType()]); + } else if (customPacket instanceof NpcDialogueFormDataPacket formData) { + + if (formData.action().equals("CLOSE")) { + NpcDialogueForm openForm = NpcDialogueForms.getOpenNpcDialogueForms(session); + if (openForm != null) { + openForm.close(session); + } + return; + } + + NpcDialogueForm form = new NpcDialogueForm(); + form.title(formData.title()) + .dialogue(formData.dialogue()) + .bindEntity(session.getEntityCache().getEntityByJavaId(formData.bindEntity())) + .hasNextForm(formData.hasNextForm()); + + if (formData.skinData() != null) { + form.skinData(formData.skinData()); + } + + + List