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