diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 4ac2726..c3ca605 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -19,12 +19,12 @@ jobs: with: java-version: 17 distribution: 'zulu' - + # Build - name: Build with Maven run: mvn -B package --file pom.xml - - + + - name: Auto release uses: "marvinpinto/action-automatic-releases@latest" with: diff --git a/.gitignore b/.gitignore index 5ff6309..425915b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,38 +1,170 @@ -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/ +# Created by https://www.toptal.com/developers/gitignore/api/java,gradle,intellij +# Edit at https://www.toptal.com/developers/gitignore?templates=java,gradle,intellij + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format *.iws -*.iml -*.ipr -### Eclipse ### -.apt_generated -.classpath -.factorypath +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### Gradle ### +.gradle +**/build/ +!src/**/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Avoid ignore Gradle wrappper properties +!gradle-wrapper.properties + +# Cache of project +.gradletasknamecache + +# Eclipse Gradle plugin generated files +# Eclipse Core .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 +# JDT-specific (Eclipse Java Development Tools) +.classpath + +### Gradle Patch ### +# Java heap dump +*.hprof + +# End of https://www.toptal.com/developers/gitignore/api/java,gradle,intellij \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..867082d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..5682ba9 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/material_theme_project_new.xml b/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..c555d86 --- /dev/null +++ b/.idea/material_theme_project_new.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4a4279b..c0b18fd 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,3 +1,4 @@ + @@ -19,7 +20,7 @@ - + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9b53122 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index ca837c4..c499819 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,41 @@ -# GeyserUtils -- camera shake -- NPC form -- animation -- camera features(require modify geyser's startgamepacket by yourself XP) -- (and thank daoge cmd so much ❤️ XD) - -_Install_ -- GeyserUtils-Spigot -> your spigot server plugins folder -- GeyserUtils-Velocity -> your velocity proxy (if exists) -- GeyserUtils-Geyser -> your geyser extensions folder +**GeyserUtils** +================ + +A collection of utilities and tools designed to make development with Geyser easier and more efficient. + +**Overview** +------------ + +This project provides a set of reusable code snippets, functions, and classes that can be used in various projects built using the [Geyser](https://geysermc.org). The goal is to simplify common tasks and reduce boilerplate code, making development with Geyser more enjoyable. + +**Features** +------------ + +* Camera shake +* NPC form +* Animation +* Camera features _(require modify geyser's StartGamePacket by yourself XP)_ +* And more! + +**Contributing** +--------------- + +We welcome contributions to this repository! If you'd like to add a new feature or fix a bug, please: + +1. Fork the repository: `git fork https://github.com/GeyserExtensionists/GeyserUtils.git` +2. Create a new branch: `git checkout -b new-feature` +3. Make your changes and commit them +4. Push your changes to your forked repository +5. Open a pull request against the original repository + +**License** +----------- + +GeyserUtils is licensed under the [MIT License](https://opensource.org/licenses/MIT). + +**Acknowledgments** +------------------ + +A special thank you to all contributors who have helped shape this project into what it is today. + +Feel free to reach out if you'd like more information about GeyserUtils or its usage in your projects. \ No newline at end of file diff --git a/bungee/geyserutils-bungee.iml b/bungee/geyserutils-bungee.iml new file mode 100644 index 0000000..80fd98d --- /dev/null +++ b/bungee/geyserutils-bungee.iml @@ -0,0 +1,13 @@ + + + + + + + BUNGEECORD + + 1 + + + + \ No newline at end of file diff --git a/bungee/pom.xml b/bungee/pom.xml index 7b457d5..099cfa1 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -1,39 +1,50 @@ - 4.0.0 - me.zimzaza4 GeyserUtils 1.0-SNAPSHOT - geyserutils-bungee - + 1.8 - UTF-8 + + + + + net.md-5 + bungeecord-api + ${bungeecord.version} + provided + + + + clean package + org.apache.maven.plugins maven-compiler-plugin - 3.8.1 + ${compiler.plugin.version} ${java.version} ${java.version} + org.apache.maven.plugins maven-shade-plugin - 3.2.4 + ${shade.plugin.version} package @@ -54,20 +65,4 @@ - - - - sonatype - https://oss.sonatype.org/content/groups/public/ - - - - - - net.md-5 - bungeecord-api - 1.20-R0.3-SNAPSHOT - provided - - diff --git a/bungee/src/main/java/me/zimzaza4/geyserutils/bungee/GeyserUtils.java b/bungee/src/main/java/me/zimzaza4/geyserutils/bungee/GeyserUtils.java index 4397784..10b1f4c 100644 --- a/bungee/src/main/java/me/zimzaza4/geyserutils/bungee/GeyserUtils.java +++ b/bungee/src/main/java/me/zimzaza4/geyserutils/bungee/GeyserUtils.java @@ -9,11 +9,9 @@ public final class GeyserUtils extends Plugin { public void onEnable() { ProxyServer.getInstance() .registerChannel("geyserutils:main"); - // Plugin startup logic } @Override public void onDisable() { - // Plugin shutdown logic } } diff --git a/bungee/target/classes/bungee.yml b/bungee/target/classes/bungee.yml new file mode 100644 index 0000000..c33ed47 --- /dev/null +++ b/bungee/target/classes/bungee.yml @@ -0,0 +1,3 @@ +name: GeyserUtils +version: '1.0-SNAPSHOT' +main: me.zimzaza4.geyserutils.bungee.GeyserUtils diff --git a/bungee/target/maven-archiver/pom.properties b/bungee/target/maven-archiver/pom.properties new file mode 100644 index 0000000..fe81564 --- /dev/null +++ b/bungee/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=geyserutils-bungee +groupId=me.zimzaza4 +version=1.0-SNAPSHOT diff --git a/bungee/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/bungee/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..0073901 --- /dev/null +++ b/bungee/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1 @@ +me/zimzaza4/geyserutils/bungee/GeyserUtils.class diff --git a/bungee/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/bungee/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..8ec889d --- /dev/null +++ b/bungee/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1 @@ +/Users/rochblondiaux/Development/Perso/GeyserUtils/bungee/src/main/java/me/zimzaza4/geyserutils/bungee/GeyserUtils.java diff --git a/common/pom.xml b/common/pom.xml index db42047..e8082ea 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 @@ -8,21 +8,43 @@ GeyserUtils 1.0-SNAPSHOT - geyserutils-common + jar - - 11 - 11 - UTF-8 - + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${compiler.plugin.version} + + ${java.version} + ${java.version} + + + org.apache.maven.plugins maven-shade-plugin - 3.4.1 + ${shade.plugin.version} @@ -51,38 +73,4 @@ - - - - - - org.projectlombok - lombok - 1.18.28 - compile - - - com.fasterxml.jackson.core - jackson-core - 2.15.2 - - - com.fasterxml.jackson.core - jackson-databind - 2.15.2 - - - org.jetbrains - annotations - 24.0.1 - compile - - - org.jetbrains - annotations - 24.0.1 - compile - - - \ No newline at end of file diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/animation/Animation.java b/common/src/main/java/me/zimzaza4/geyserutils/common/animation/Animation.java index 2e74ccf..18f8ac3 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/animation/Animation.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/animation/Animation.java @@ -6,6 +6,7 @@ @Builder @Getter public class Animation { + public static final float DEFAULT_BLEND_OUT_TIME = 0.0f; public static final String DEFAULT_STOP_EXPRESSION = "query.any_animation_finished"; public static final String DEFAULT_CONTROLLER = "__runtime_controller"; @@ -23,4 +24,5 @@ public class Animation { private String controller = DEFAULT_CONTROLLER; @Builder.Default private int stopExpressionVersion = DEFAULT_STOP_EXPRESSION_VERSION; + } \ No newline at end of file diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/CameraPreset.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/CameraPreset.java index 35f2d6f..19549f4 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/CameraPreset.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/CameraPreset.java @@ -1,16 +1,44 @@ package me.zimzaza4.geyserutils.common.camera.data; +import java.util.Map; +import java.util.TreeMap; + +import org.jetbrains.annotations.Nullable; + import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; import me.zimzaza4.geyserutils.common.util.Pos; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.TreeMap; @Getter +@NoArgsConstructor(access = lombok.AccessLevel.PROTECTED) public class CameraPreset { + private static final Map PRESETS = new TreeMap<>(); + public static CameraPreset FIRST_PERSON; + public static CameraPreset FREE; + public static CameraPreset THIRD_PERSON; + public static CameraPreset THIRD_PERSON_FRONT; + + private String identifier; + @Getter + private String inheritFrom; + @Getter + @Nullable + private Pos pos; + @Getter + @Nullable + private Rot rot; + @Getter + private int id; + + @Builder + public CameraPreset(String identifier, String inheritFrom, @Nullable Pos pos, @Nullable Rot rot) { + this.identifier = identifier; + this.inheritFrom = inheritFrom != null ? inheritFrom : ""; + this.pos = pos; + this.rot = rot; + } public static Map getPresets() { return PRESETS; @@ -34,11 +62,6 @@ public static void registerCameraPresets(CameraPreset... presets) { } } - public static CameraPreset FIRST_PERSON; - public static CameraPreset FREE; - public static CameraPreset THIRD_PERSON; - public static CameraPreset THIRD_PERSON_FRONT; - public static void load() { FIRST_PERSON = CameraPreset.builder() .identifier("minecraft:first_person") @@ -57,29 +80,4 @@ public static void load() { registerCameraPresets(FIRST_PERSON, FREE, THIRD_PERSON, THIRD_PERSON_FRONT); } - - private String identifier; - @Getter - private String inheritFrom; - @Getter - @Nullable - private Pos pos; - @Getter - @Nullable - private Rot rot; - - @Getter - private int id; - - @Builder - public CameraPreset(String identifier, String inheritFrom, @Nullable Pos pos, @Nullable Rot rot) { - this.identifier = identifier; - this.inheritFrom = inheritFrom != null ? inheritFrom : ""; - this.pos = pos; - this.rot = rot; - } - - protected CameraPreset() { - - } } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Color.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Color.java index 2c82bee..a1bf1f3 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Color.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Color.java @@ -10,7 +10,9 @@ @Accessors(fluent = true) @Data public class Color { - float r; - float g; - float b; + + private float r; + private float g; + private float b; + } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Ease.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Ease.java index 2368f4e..051638d 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Ease.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Ease.java @@ -1,7 +1,5 @@ package me.zimzaza4.geyserutils.common.camera.data; -import com.fasterxml.jackson.databind.JsonNode; -import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; @@ -11,8 +9,8 @@ @Data public class Ease { - float time; - int easeType; + private float time; + private int easeType; public Ease(float time, EaseType easeType) { this.time = time; diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/EaseType.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/EaseType.java index f4ece98..b85c621 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/EaseType.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/EaseType.java @@ -1,48 +1,46 @@ package me.zimzaza4.geyserutils.common.camera.data; import lombok.Getter; +import lombok.RequiredArgsConstructor; @Getter +@RequiredArgsConstructor public enum EaseType { - LINEAR("linear",0), - SPRING("spring",1), - EASE_IN_SINE("in_sine",2), - EASE_OUT_SINE("out_sine",3), - EASE_IN_OUT_SINE("in_out_sine",4), - EASE_IN_QUAD("in_quad",5), - EASE_OUT_QUAD("out_quad",6), - EASE_IN_OUT_QUAD("in_out_quad",7), - EASE_IN_CUBIC("in_cubic",8), - EASE_OUT_CUBIC("out_cubic",9), - EASE_IN_OUT_CUBIC("in_out_cubic",10), - EASE_IN_QUART("in_quart",11), - EASE_OUT_QUART("out_quart",12), - EASE_IN_OUT_QUART("in_out_quart",13), - EASE_IN_QUINT("in_quint",14), - EASE_OUT_QUINT("out_quint",15), - EASE_IN_OUT_QUINT("in_out_quint",16), - EASE_IN_EXPO("in_expo",17), - EASE_OUT_EXPO("out_expo",18), - EASE_IN_OUT_EXPO("in_out_expo",19), - EASE_IN_CIRC("in_circ",20), - EASE_OUT_CIRC("out_circ",21), - EASE_IN_OUT_CIRC("in_out_circ",22), - EASE_IN_BACK("in_back",23), - EASE_OUT_BACK("out_back",24), - EASE_IN_OUT_BACK("in_out_back",25), - EASE_IN_ELASTIC("in_elastic",26), - EASE_OUT_ELASTIC("out_elastic",27), - EASE_IN_OUT_ELASTIC("in_out_elastic",28), - EASE_IN_BOUNCE("in_bounce",29), - EASE_OUT_BOUNCE("out_bounce",30), - EASE_IN_OUT_BOUNCE("in_out_bounce",31); + LINEAR("linear", 0), + SPRING("spring", 1), + EASE_IN_SINE("in_sine", 2), + EASE_OUT_SINE("out_sine", 3), + EASE_IN_OUT_SINE("in_out_sine", 4), + EASE_IN_QUAD("in_quad", 5), + EASE_OUT_QUAD("out_quad", 6), + EASE_IN_OUT_QUAD("in_out_quad", 7), + EASE_IN_CUBIC("in_cubic", 8), + EASE_OUT_CUBIC("out_cubic", 9), + EASE_IN_OUT_CUBIC("in_out_cubic", 10), + EASE_IN_QUART("in_quart", 11), + EASE_OUT_QUART("out_quart", 12), + EASE_IN_OUT_QUART("in_out_quart", 13), + EASE_IN_QUINT("in_quint", 14), + EASE_OUT_QUINT("out_quint", 15), + EASE_IN_OUT_QUINT("in_out_quint", 16), + EASE_IN_EXPO("in_expo", 17), + EASE_OUT_EXPO("out_expo", 18), + EASE_IN_OUT_EXPO("in_out_expo", 19), + EASE_IN_CIRC("in_circ", 20), + EASE_OUT_CIRC("out_circ", 21), + EASE_IN_OUT_CIRC("in_out_circ", 22), + EASE_IN_BACK("in_back", 23), + EASE_OUT_BACK("out_back", 24), + EASE_IN_OUT_BACK("in_out_back", 25), + EASE_IN_ELASTIC("in_elastic", 26), + EASE_OUT_ELASTIC("out_elastic", 27), + EASE_IN_OUT_ELASTIC("in_out_elastic", 28), + EASE_IN_BOUNCE("in_bounce", 29), + EASE_OUT_BOUNCE("out_bounce", 30), + EASE_IN_OUT_BOUNCE("in_out_bounce", 31); private final String type; private final int index; - EaseType(String type, int index) { - this.type = type; - this.index = index; - } } \ No newline at end of file diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Rot.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Rot.java index a4eade3..ec66ff7 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Rot.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Rot.java @@ -10,6 +10,8 @@ @Accessors(fluent = true) @Data public class Rot { - float x; - float y; + + private float x; + private float y; + } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Time.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Time.java index 76f5f5f..ceab387 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Time.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Time.java @@ -10,7 +10,9 @@ @Accessors(fluent = true) @Data public class Time { - float fadeIn; - float hold; - float fadeOut; + + private float fadeIn; + private float hold; + private float fadeOut; + } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/ClearInstruction.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/ClearInstruction.java index 7987ee6..6eb5f1e 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/ClearInstruction.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/ClearInstruction.java @@ -1,17 +1,18 @@ package me.zimzaza4.geyserutils.common.camera.instruction; +import lombok.AccessLevel; import lombok.Getter; +import lombok.NoArgsConstructor; @Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class ClearInstruction implements Instruction { + private static final ClearInstruction INSTANCE = new ClearInstruction(); private final int clear = 1; - private ClearInstruction() {} - public static ClearInstruction instance() { return INSTANCE; } - } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/FadeInstruction.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/FadeInstruction.java index 009841f..403c24a 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/FadeInstruction.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/FadeInstruction.java @@ -1,20 +1,19 @@ package me.zimzaza4.geyserutils.common.camera.instruction; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; +import lombok.*; import me.zimzaza4.geyserutils.common.camera.data.Color; import me.zimzaza4.geyserutils.common.camera.data.Time; import org.jetbrains.annotations.Nullable; @Builder @AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class FadeInstruction implements Instruction { + @Nullable private Color color; @Nullable private Time time; - protected FadeInstruction() {} } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java index 7abe8e4..d376cb8 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java @@ -3,13 +3,14 @@ import lombok.*; import me.zimzaza4.geyserutils.common.camera.data.CameraPreset; import me.zimzaza4.geyserutils.common.camera.data.Ease; -import me.zimzaza4.geyserutils.common.util.Pos; import me.zimzaza4.geyserutils.common.camera.data.Rot; +import me.zimzaza4.geyserutils.common.util.Pos; import org.jetbrains.annotations.Nullable; @AllArgsConstructor @Builder @Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) public class SetInstruction implements Instruction { @Nullable @@ -23,5 +24,5 @@ public class SetInstruction implements Instruction { private CameraPreset preset; @Nullable private FadeInstruction fade; - protected SetInstruction() {} + } 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 index d218c69..63813f2 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/channel/GeyserUtilsChannels.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/channel/GeyserUtilsChannels.java @@ -1,5 +1,7 @@ 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/NpcDialogueButton.java similarity index 73% rename from common/src/main/java/me/zimzaza4/geyserutils/common/form/element/NpcDialogueButton.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/form/NpcDialogueButton.java index 924387e..4b0baf3 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/form/element/NpcDialogueButton.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/form/NpcDialogueButton.java @@ -1,21 +1,23 @@ -package me.zimzaza4.geyserutils.common.form.element; +package me.zimzaza4.geyserutils.common.form; +import lombok.Builder; 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 ) +@Accessors(fluent = true) +@Builder 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/common/src/main/java/me/zimzaza4/geyserutils/common/manager/PacketManager.java b/common/src/main/java/me/zimzaza4/geyserutils/common/manager/PacketManager.java index 41cbe6c..cadc1d7 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/manager/PacketManager.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/manager/PacketManager.java @@ -2,18 +2,13 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; -import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; import java.io.IOException; -import java.nio.charset.StandardCharsets; public class PacketManager { @@ -21,26 +16,24 @@ public class PacketManager { public PacketManager() { objectMapper = new ObjectMapper(); - objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.EVERYTHING, JsonTypeInfo.As.PROPERTY); + objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL_AND_ENUMS, JsonTypeInfo.As.PROPERTY); objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); } public byte[] encodePacket(CustomPayloadPacket packet) { - try { return objectMapper.writeValueAsBytes(packet); } catch (JsonProcessingException e) { - throw new RuntimeException(e); + throw new RuntimeException("Failed to encode packet", e); } - } public CustomPayloadPacket decodePacket(byte[] bytes) { try { return objectMapper.readValue(bytes, CustomPayloadPacket.class); } catch (IOException e) { - throw new RuntimeException(e); + throw new RuntimeException("Failed to decode packet", e); } } } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/AnimateEntityCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/AnimateEntityCustomPayloadPacket.java deleted file mode 100644 index cc2cb8c..0000000 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/AnimateEntityCustomPayloadPacket.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.zimzaza4.geyserutils.common.packet; - -import lombok.Getter; -import lombok.Setter; -import me.zimzaza4.geyserutils.common.animation.Animation; - -import java.util.ArrayList; -import java.util.List; - -@Setter -@Getter -public class AnimateEntityCustomPayloadPacket extends CustomPayloadPacket{ - private String animation; - private String nextState; - private String stopExpression; - private int stopExpressionVersion; - private String controller; - private float blendOutTime; - private List entityJavaIds = new ArrayList<>(); - - public void parseFromAnimation(Animation ani) { - this.animation = ani.getAnimation(); - this.nextState = ani.getNextState(); - this.blendOutTime = ani.getBlendOutTime(); - this.stopExpression = ani.getStopExpression(); - this.controller = ani.getController(); - this.stopExpressionVersion = ani.getStopExpressionVersion(); - } - -} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/BundlePacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/BundlePacket.java index a9eae80..dc80158 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/BundlePacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/BundlePacket.java @@ -1,9 +1,14 @@ package me.zimzaza4.geyserutils.common.packet; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import me.zimzaza4.geyserutils.common.packet.entity.EntityPropertyPacket; import java.util.ArrayList; import java.util.List; +import java.util.Map; @AllArgsConstructor @NoArgsConstructor @@ -17,4 +22,14 @@ public void addPacket(CustomPayloadPacket packet) { this.packets.add(packet); } + public static BundlePacket create(Map bundle) { + BundlePacket packet = new BundlePacket(); + bundle.forEach((identifier, value) -> { + EntityPropertyPacket propertyPacket = new EntityPropertyPacket<>(); + propertyPacket.setIdentifier(identifier); + propertyPacket.setValue(value); + packet.addPacket(propertyPacket); + }); + return packet; + } } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomParticleEffectPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomParticleEffectPayloadPacket.java index f6e58fe..0141c45 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomParticleEffectPayloadPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomParticleEffectPayloadPacket.java @@ -4,18 +4,15 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import lombok.experimental.Accessors; -import me.zimzaza4.geyserutils.common.animation.Animation; -import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; import me.zimzaza4.geyserutils.common.particle.CustomParticle; import me.zimzaza4.geyserutils.common.util.Pos; -import org.jetbrains.annotations.Nullable; @AllArgsConstructor @NoArgsConstructor @Getter @Setter public class CustomParticleEffectPayloadPacket extends CustomPayloadPacket { + private CustomParticle particle; private Pos pos; diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomPayloadPacket.java index b39ccf0..3639f08 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomPayloadPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomPayloadPacket.java @@ -1,11 +1,6 @@ package me.zimzaza4.geyserutils.common.packet; -import lombok.Getter; -import lombok.Setter; - -import java.io.Serializable; - public abstract class CustomPayloadPacket { diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomSkinPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomSkinPayloadPacket.java index bf5b640..60b79cc 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomSkinPayloadPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomSkinPayloadPacket.java @@ -5,14 +5,13 @@ import lombok.NoArgsConstructor; import lombok.Setter; -import java.util.ArrayList; -import java.util.List; - @Setter @Getter @AllArgsConstructor @NoArgsConstructor public class CustomSkinPayloadPacket extends CustomPayloadPacket { + private int entityId; private String skinId; + } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcDialogueFormDataCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcDialogueFormDataCustomPayloadPacket.java deleted file mode 100644 index d30b1a5..0000000 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcDialogueFormDataCustomPayloadPacket.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.zimzaza4.geyserutils.common.packet; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.experimental.Accessors; -import me.zimzaza4.geyserutils.common.form.element.NpcDialogueButton; - -import java.util.List; - -@AllArgsConstructor -@NoArgsConstructor -@Accessors(fluent = true) -@Getter -@Setter -public class NpcDialogueFormDataCustomPayloadPacket extends CustomPayloadPacket { - - 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/CameraInstructionCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraInstructionCustomPayloadPacket.java similarity index 52% rename from common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraInstructionCustomPayloadPacket.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraInstructionCustomPayloadPacket.java index 5148c6e..b0938d8 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraInstructionCustomPayloadPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraInstructionCustomPayloadPacket.java @@ -1,11 +1,18 @@ -package me.zimzaza4.geyserutils.common.packet; +package me.zimzaza4.geyserutils.common.packet.camera; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import me.zimzaza4.geyserutils.common.camera.instruction.Instruction; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; @Setter @Getter +@NoArgsConstructor +@AllArgsConstructor public class CameraInstructionCustomPayloadPacket extends CustomPayloadPacket { + private Instruction instruction; + } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraLockCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraLockCustomPayloadPacket.java similarity index 65% rename from common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraLockCustomPayloadPacket.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraLockCustomPayloadPacket.java index 48ff27f..a3e9ccf 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraLockCustomPayloadPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraLockCustomPayloadPacket.java @@ -1,9 +1,10 @@ -package me.zimzaza4.geyserutils.common.packet; +package me.zimzaza4.geyserutils.common.packet.camera; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; @Getter @AllArgsConstructor diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraShakeCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraShakeCustomPayloadPacket.java similarity index 69% rename from common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraShakeCustomPayloadPacket.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraShakeCustomPayloadPacket.java index 4531e57..d857c28 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CameraShakeCustomPayloadPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraShakeCustomPayloadPacket.java @@ -1,8 +1,9 @@ -package me.zimzaza4.geyserutils.common.packet; +package me.zimzaza4.geyserutils.common.packet.camera; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; @Getter @AllArgsConstructor diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/AnimateEntityCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/AnimateEntityCustomPayloadPacket.java new file mode 100644 index 0000000..719776c --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/AnimateEntityCustomPayloadPacket.java @@ -0,0 +1,32 @@ +package me.zimzaza4.geyserutils.common.packet.entity; + +import lombok.Getter; +import lombok.Setter; +import me.zimzaza4.geyserutils.common.animation.Animation; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; + +import java.util.ArrayList; +import java.util.List; + +@Setter +@Getter +public class AnimateEntityCustomPayloadPacket extends CustomPayloadPacket { + + private String animation; + private String nextState; + private String stopExpression; + private int stopExpressionVersion; + private String controller; + private float blendOutTime; + private List entityJavaIds = new ArrayList<>(); + + public void parseFromAnimation(Animation animation) { + this.animation = animation.getAnimation(); + this.nextState = animation.getNextState(); + this.blendOutTime = animation.getBlendOutTime(); + this.stopExpression = animation.getStopExpression(); + this.controller = animation.getController(); + this.stopExpressionVersion = animation.getStopExpressionVersion(); + } + +} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomEntityDataPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/CustomEntityDataPacket.java similarity index 76% rename from common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomEntityDataPacket.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/CustomEntityDataPacket.java index a8468c4..f44cacb 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomEntityDataPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/CustomEntityDataPacket.java @@ -1,15 +1,17 @@ -package me.zimzaza4.geyserutils.common.packet; +package me.zimzaza4.geyserutils.common.packet.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; @AllArgsConstructor @NoArgsConstructor @Getter @Setter public class CustomEntityDataPacket extends CustomPayloadPacket { + private int entityId; private Float height; private Float width; diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomEntityPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/CustomEntityPacket.java similarity index 70% rename from common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomEntityPacket.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/CustomEntityPacket.java index 1353235..f4b8e67 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomEntityPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/CustomEntityPacket.java @@ -1,17 +1,18 @@ -package me.zimzaza4.geyserutils.common.packet; +package me.zimzaza4.geyserutils.common.packet.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; - -import java.util.UUID; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; @Setter @Getter @AllArgsConstructor @NoArgsConstructor public class CustomEntityPacket extends CustomPayloadPacket { + private int entityId; private String identifier; + } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/EntityPropertyPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyPacket.java similarity index 72% rename from common/src/main/java/me/zimzaza4/geyserutils/common/packet/EntityPropertyPacket.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyPacket.java index 8a67caa..111bfa7 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/EntityPropertyPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyPacket.java @@ -1,17 +1,18 @@ -package me.zimzaza4.geyserutils.common.packet; +package me.zimzaza4.geyserutils.common.packet.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; @Setter @Getter @AllArgsConstructor @NoArgsConstructor public class EntityPropertyPacket extends CustomPayloadPacket { - private int entityId; + private int entityId; private String identifier; private T value; diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/EntityPropertyRegisterPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyRegisterPacket.java similarity index 73% rename from common/src/main/java/me/zimzaza4/geyserutils/common/packet/EntityPropertyRegisterPacket.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyRegisterPacket.java index 1d09431..9ff28f8 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/EntityPropertyRegisterPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyRegisterPacket.java @@ -1,17 +1,18 @@ -package me.zimzaza4.geyserutils.common.packet; +package me.zimzaza4.geyserutils.common.packet.entity; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; @Setter @Getter @AllArgsConstructor @NoArgsConstructor public class EntityPropertyRegisterPacket extends CustomPayloadPacket { - private int entityId; + private int entityId; private String identifier; private Class type; diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/form/NpcDialogueFormDataCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/form/NpcDialogueFormDataCustomPayloadPacket.java new file mode 100644 index 0000000..c3b727b --- /dev/null +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/form/NpcDialogueFormDataCustomPayloadPacket.java @@ -0,0 +1,29 @@ +package me.zimzaza4.geyserutils.common.packet.form; + +import java.util.List; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.Accessors; +import me.zimzaza4.geyserutils.common.form.NpcDialogueButton; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; + +@AllArgsConstructor +@NoArgsConstructor +@Accessors(fluent = true) +@Getter +@Setter +public class NpcDialogueFormDataCustomPayloadPacket extends CustomPayloadPacket { + + private String formId; + private String title; + private String dialogue; + private String skinData; + private int bindEntity; + private List buttons; + private String action; + private boolean hasNextForm; + +} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcFormResponseCustomPayloadPacket.java b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/form/NpcFormResponseCustomPayloadPacket.java similarity index 55% rename from common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcFormResponseCustomPayloadPacket.java rename to common/src/main/java/me/zimzaza4/geyserutils/common/packet/form/NpcFormResponseCustomPayloadPacket.java index 66bbae0..7bba59d 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/packet/NpcFormResponseCustomPayloadPacket.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/packet/form/NpcFormResponseCustomPayloadPacket.java @@ -1,13 +1,16 @@ -package me.zimzaza4.geyserutils.common.packet; +package me.zimzaza4.geyserutils.common.packet.form; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; @AllArgsConstructor @NoArgsConstructor @Getter public class NpcFormResponseCustomPayloadPacket extends CustomPayloadPacket { - String formId; - int buttonId; + + private String formId; + private int buttonId; + } diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/particle/CustomParticle.java b/common/src/main/java/me/zimzaza4/geyserutils/common/particle/CustomParticle.java index caa623c..902fbd8 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/particle/CustomParticle.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/particle/CustomParticle.java @@ -14,8 +14,10 @@ @Getter @Setter public class CustomParticle { + private Pos position; private String identifier; @Nullable private String molangVariablesJson; + } 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 deleted file mode 100644 index f5d26a4..0000000 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/util/CustomPayloadPacketUtils.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.zimzaza4.geyserutils.common.util; - -public class CustomPayloadPacketUtils { - - - -} diff --git a/common/src/main/java/me/zimzaza4/geyserutils/common/util/Pos.java b/common/src/main/java/me/zimzaza4/geyserutils/common/util/Pos.java index 4debef9..5a35ae6 100644 --- a/common/src/main/java/me/zimzaza4/geyserutils/common/util/Pos.java +++ b/common/src/main/java/me/zimzaza4/geyserutils/common/util/Pos.java @@ -10,7 +10,8 @@ @Accessors(fluent = true) @Data public class Pos { - float x; - float y; - float z; + + private float x; + private float y; + private float z; } diff --git a/common/target/maven-archiver/pom.properties b/common/target/maven-archiver/pom.properties new file mode 100644 index 0000000..98e0726 --- /dev/null +++ b/common/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=geyserutils-common +groupId=me.zimzaza4 +version=1.0-SNAPSHOT diff --git a/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..ed2fcaa --- /dev/null +++ b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,36 @@ +me/zimzaza4/geyserutils/common/manager/PacketManager.class +me/zimzaza4/geyserutils/common/form/NpcDialogueButton$ButtonMode.class +me/zimzaza4/geyserutils/common/camera/data/EaseType.class +me/zimzaza4/geyserutils/common/camera/data/CameraPreset.class +me/zimzaza4/geyserutils/common/animation/Animation$AnimationBuilder.class +me/zimzaza4/geyserutils/common/packet/entity/AnimateEntityCustomPayloadPacket.class +me/zimzaza4/geyserutils/common/packet/entity/CustomEntityPacket.class +me/zimzaza4/geyserutils/common/packet/camera/CameraLockCustomPayloadPacket.class +me/zimzaza4/geyserutils/common/packet/BundlePacket.class +me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyPacket.class +me/zimzaza4/geyserutils/common/particle/CustomParticle.class +me/zimzaza4/geyserutils/common/util/Pos.class +me/zimzaza4/geyserutils/common/form/NpcDialogueButton.class +me/zimzaza4/geyserutils/common/packet/form/NpcFormResponseCustomPayloadPacket.class +me/zimzaza4/geyserutils/common/camera/data/CameraPreset$CameraPresetBuilder.class +me/zimzaza4/geyserutils/common/channel/GeyserUtilsChannels.class +me/zimzaza4/geyserutils/common/animation/Animation.class +me/zimzaza4/geyserutils/common/packet/CustomParticleEffectPayloadPacket.class +me/zimzaza4/geyserutils/common/camera/data/Ease.class +me/zimzaza4/geyserutils/common/camera/instruction/FadeInstruction$FadeInstructionBuilder.class +me/zimzaza4/geyserutils/common/camera/instruction/FadeInstruction.class +me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyRegisterPacket.class +me/zimzaza4/geyserutils/common/camera/instruction/ClearInstruction.class +me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction$SetInstructionBuilder.class +me/zimzaza4/geyserutils/common/camera/data/Time.class +me/zimzaza4/geyserutils/common/packet/form/NpcDialogueFormDataCustomPayloadPacket.class +me/zimzaza4/geyserutils/common/packet/CustomPayloadPacket.class +me/zimzaza4/geyserutils/common/packet/entity/CustomEntityDataPacket.class +me/zimzaza4/geyserutils/common/packet/CustomSkinPayloadPacket.class +me/zimzaza4/geyserutils/common/packet/camera/CameraInstructionCustomPayloadPacket.class +me/zimzaza4/geyserutils/common/packet/camera/CameraShakeCustomPayloadPacket.class +me/zimzaza4/geyserutils/common/form/NpcDialogueButton$NpcDialogueButtonBuilder.class +me/zimzaza4/geyserutils/common/camera/instruction/Instruction.class +me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.class +me/zimzaza4/geyserutils/common/camera/data/Rot.class +me/zimzaza4/geyserutils/common/camera/data/Color.class diff --git a/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..f8b39f0 --- /dev/null +++ b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,30 @@ +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/animation/Animation.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/CameraPreset.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Color.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Ease.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/EaseType.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Rot.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/data/Time.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/ClearInstruction.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/FadeInstruction.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/Instruction.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/camera/instruction/SetInstruction.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/channel/GeyserUtilsChannels.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/form/NpcDialogueButton.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/manager/PacketManager.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/BundlePacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomParticleEffectPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/CustomSkinPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraInstructionCustomPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraLockCustomPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/camera/CameraShakeCustomPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/AnimateEntityCustomPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/CustomEntityDataPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/CustomEntityPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/entity/EntityPropertyRegisterPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/form/NpcDialogueFormDataCustomPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/packet/form/NpcFormResponseCustomPayloadPacket.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/particle/CustomParticle.java +/Users/rochblondiaux/Development/Perso/GeyserUtils/common/src/main/java/me/zimzaza4/geyserutils/common/util/Pos.java diff --git a/geyser/geyserutils-geyser.iml b/geyser/geyserutils-geyser.iml new file mode 100644 index 0000000..a376b96 --- /dev/null +++ b/geyser/geyserutils-geyser.iml @@ -0,0 +1,13 @@ + + + + + + + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/geyser/libs/Geyser-Standalone.jar b/geyser/libs/Geyser-Standalone.jar deleted file mode 100644 index 341c3a6..0000000 Binary files a/geyser/libs/Geyser-Standalone.jar and /dev/null differ diff --git a/geyser/pom.xml b/geyser/pom.xml index 8d631a8..4cd688c 100644 --- a/geyser/pom.xml +++ b/geyser/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 @@ -8,21 +8,44 @@ GeyserUtils 1.0-SNAPSHOT - geyserutils-geyser - - 17 - 17 - UTF-8 - + + + + + org.geysermc.geyser + core + ${geyser.version} + provided + + + + me.zimzaza4 + geyserutils-common + 1.0-SNAPSHOT + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${compiler.plugin.version} + + ${java.version} + ${java.version} + + + org.apache.maven.plugins maven-shade-plugin - 3.4.1 + ${shade.plugin.version} package @@ -43,52 +66,4 @@ - - - - - opencollab-release-repo - https://repo.opencollab.dev/maven-releases/ - - true - - - true - - - - 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 - core - 2.6.0-SNAPSHOT - system - ${project.basedir}/libs/Geyser-Standalone.jar - - - 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 index bcb8ed7..2143456 100644 --- a/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java +++ b/geyser/src/main/java/me/zimzaza4/geyserutils/geyser/GeyserUtils.java @@ -1,26 +1,19 @@ package me.zimzaza4.geyserutils.geyser; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import lombok.Getter; -import me.zimzaza4.geyserutils.common.camera.data.CameraPreset; -import me.zimzaza4.geyserutils.common.camera.instruction.ClearInstruction; -import me.zimzaza4.geyserutils.common.camera.instruction.FadeInstruction; -import me.zimzaza4.geyserutils.common.camera.instruction.SetInstruction; -import me.zimzaza4.geyserutils.common.channel.GeyserUtilsChannels; -import me.zimzaza4.geyserutils.common.form.element.NpcDialogueButton; -import me.zimzaza4.geyserutils.common.manager.PacketManager; -import me.zimzaza4.geyserutils.common.packet.*; -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.replace.JavaAddEntityTranslatorReplace; -import me.zimzaza4.geyserutils.geyser.translator.NPCFormResponseTranslator; -import me.zimzaza4.geyserutils.geyser.util.Converter; -import me.zimzaza4.geyserutils.geyser.util.DeltaUtils; -import me.zimzaza4.geyserutils.geyser.util.ReflectionUtils; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import javax.imageio.ImageIO; + import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -56,46 +49,53 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddEntityPacket; import org.jetbrains.annotations.NotNull; -import javax.imageio.ImageIO; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + +import lombok.Getter; +import me.zimzaza4.geyserutils.common.camera.data.CameraPreset; +import me.zimzaza4.geyserutils.common.camera.instruction.ClearInstruction; +import me.zimzaza4.geyserutils.common.camera.instruction.FadeInstruction; +import me.zimzaza4.geyserutils.common.camera.instruction.SetInstruction; +import me.zimzaza4.geyserutils.common.channel.GeyserUtilsChannels; +import me.zimzaza4.geyserutils.common.form.NpcDialogueButton; +import me.zimzaza4.geyserutils.common.manager.PacketManager; +import me.zimzaza4.geyserutils.common.packet.BundlePacket; +import me.zimzaza4.geyserutils.common.packet.CustomParticleEffectPayloadPacket; +import me.zimzaza4.geyserutils.common.packet.CustomPayloadPacket; +import me.zimzaza4.geyserutils.common.packet.CustomSkinPayloadPacket; +import me.zimzaza4.geyserutils.common.packet.camera.CameraShakeCustomPayloadPacket; +import me.zimzaza4.geyserutils.common.packet.entity.AnimateEntityCustomPayloadPacket; +import me.zimzaza4.geyserutils.common.packet.entity.EntityPropertyRegisterPacket; +import me.zimzaza4.geyserutils.common.packet.form.NpcFormResponseCustomPayloadPacket; +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.replace.JavaAddEntityTranslatorReplace; +import me.zimzaza4.geyserutils.geyser.translator.NPCFormResponseTranslator; +import me.zimzaza4.geyserutils.geyser.util.Converter; +import me.zimzaza4.geyserutils.geyser.util.DeltaUtils; +import me.zimzaza4.geyserutils.geyser.util.ReflectionUtils; public class GeyserUtils implements Extension { + public static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2); + private static final Map>>> properties = new HashMap<>(); + private static final List ENTITIES_WAIT_FOR_LOAD = new ArrayList<>(); @Getter public static PacketManager packetManager = new PacketManager(); - public static List REGISTERED_ENTITIES = new ArrayList<>(); - private static List ENTITIES_WAIT_FOR_LOAD = new ArrayList<>(); - - public static boolean GEYSER_LOADED = false; - @Getter public static Map LOADED_SKIN_DATA = new HashMap<>(); - @Getter - public static Map LOADED_ENTITY_DEFINITIONS = new HashMap<>(); - + public static Map> LOADED_ENTITY_DEFINITIONS = new HashMap<>(); @Getter public static Map> CUSTOM_ENTITIES = new ConcurrentHashMap<>(); - static Cape EMPTY_CAPE = new Cape("", "no-cape", new byte[0], true); - - public static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2); - - private static final Map>>> properties = new HashMap<>(); - @Getter private static GeyserUtils instance; @@ -103,25 +103,6 @@ public GeyserUtils() { instance = this; } - @Subscribe - public void onEnable(GeyserPostInitializeEvent event) { - Registries.BEDROCK_PACKET_TRANSLATORS.register(NpcRequestPacket.class, new NPCFormResponseTranslator()); - loadSkins(); - ReflectionUtils.init(); - CameraPreset.load(); - - replaceTranslator(); - GEYSER_LOADED = true; - for (String registeredEntity : REGISTERED_ENTITIES) { - registerEntityToGeyser(registeredEntity); - } - for (String id : ENTITIES_WAIT_FOR_LOAD) { - registerPropertiesForGeyser(id); - } - logger().info("Defined " + LOADED_ENTITY_DEFINITIONS.size() + " entities"); - MountFix.start(); - } - // the static here is crazy ;( private static GeyserEntityProperties getProperties(String id) { if (!properties.containsKey(id)) return null; @@ -162,44 +143,41 @@ public static void registerProperties(String entityId) { ENTITIES_WAIT_FOR_LOAD.add(entityId); } - public static void registerPropertiesForGeyser(String entityId) { - + public static void registerPropertiesForGeyser(String entityId) { GeyserEntityProperties entityProperties = getProperties(entityId); if (entityProperties == null) return; - properties.values().stream() + + properties.values() + .stream() .flatMap(List::stream) .map(Map.Entry::getKey) - .forEach(id -> { - Registries.BEDROCK_ENTITY_PROPERTIES.get().removeIf(i -> i.containsKey(id)); - }); + .forEach(id -> Registries.BEDROCK_ENTITY_PROPERTIES.get().removeIf(i -> i.containsKey(id))); Registries.BEDROCK_ENTITY_PROPERTIES.get().add(entityProperties.toNbtMap(entityId)); EntityDefinition old = LOADED_ENTITY_DEFINITIONS.get(entityId); - LOADED_ENTITY_DEFINITIONS.replace(entityId, new EntityDefinition(old.factory(), old.entityType(), old.identifier(), - old.width(), old.height(), old.offset(), entityProperties, old.translators())); - - instance.logger().info("Defined entity: " + entityId + " in registry."); + LOADED_ENTITY_DEFINITIONS.replace(entityId, new EntityDefinition<>( + old.factory(), + old.entityType(), + old.identifier(), + old.width(), + old.height(), + old.offset(), + entityProperties, + old.translators() + )); + + instance.logger().debug("Defined entity: " + entityId + " in registry."); } public static void addCustomEntity(String id) { - /* - LOADED_ENTITY_DEFINITIONS.put(id, - EntityDefinition.builder() - .identifier(EntityIdentifier.builder().identifier(id) - .summonable(true) - .spawnEgg(false).build()) - .height(0.6f) - .width(0.6f) - .build()); - - */ if (GEYSER_LOADED) { registerEntityToGeyser(id); } REGISTERED_ENTITIES.add(id); } + public static void registerEntityToGeyser(String id) { NbtMap registry = Registries.BEDROCK_ENTITY_IDENTIFIERS.get(); List idList = new ArrayList<>(registry.getList("idlist", NbtType.COMPOUND)); @@ -221,6 +199,167 @@ public static void registerEntityToGeyser(String id) { LOADED_ENTITY_DEFINITIONS.put(id, def); } + @NotNull + private static AnimateEntityPacket getAnimateEntityPacket(me.zimzaza4.geyserutils.common.packet.entity.AnimateEntityCustomPayloadPacket animateEntityCustomPayloadPacket) { + AnimateEntityPacket animateEntityPacket = new AnimateEntityPacket(); + animateEntityPacket.setAnimation(animateEntityCustomPayloadPacket.getAnimation()); + animateEntityPacket.setController(animateEntityCustomPayloadPacket.getController()); + animateEntityPacket.setBlendOutTime(animateEntityCustomPayloadPacket.getBlendOutTime()); + animateEntityPacket.setNextState(animateEntityCustomPayloadPacket.getNextState()); + animateEntityPacket.setStopExpressionVersion(animateEntityCustomPayloadPacket.getStopExpressionVersion()); + animateEntityPacket.setStopExpression(animateEntityCustomPayloadPacket.getStopExpression()); + return animateEntityPacket; + } + + public static void sendSkinPacket(GeyserSession session, PlayerEntity entity, SkinData skinData) { + Skin skin = skinData.skin(); + Cape cape = skinData.cape(); + SkinGeometry geometry = skinData.geometry(); + + if (entity.getUuid().equals(session.getPlayerEntity().getUuid())) { + PlayerListPacket.Entry updatedEntry = buildEntryManually( + session, + entity.getUuid(), + entity.getUsername(), + entity.getGeyserId(), + skin, + cape, + geometry + ); + + PlayerListPacket playerAddPacket = new PlayerListPacket(); + playerAddPacket.setAction(PlayerListPacket.Action.ADD); + playerAddPacket.getEntries().add(updatedEntry); + session.sendUpstreamPacket(playerAddPacket); + return; + } + + PlayerSkinPacket packet = new PlayerSkinPacket(); + packet.setUuid(entity.getUuid()); + packet.setOldSkinName(""); + packet.setNewSkinName(skin.textureUrl()); + packet.setSkin(getSkin(skin.textureUrl(), skin, cape, geometry)); + packet.setTrustedSkin(true); + session.sendUpstreamPacket(packet); + } + + public static PlayerListPacket.Entry buildEntryManually(GeyserSession session, UUID uuid, String username, long geyserId, + Skin skin, + Cape cape, + SkinGeometry geometry) { + SerializedSkin serializedSkin = getSkin(skin.textureUrl(), skin, cape, geometry); + + String xuid = ""; + GeyserSession playerSession = GeyserImpl.getInstance().connectionByUuid(uuid); + + if (playerSession != null) { + xuid = playerSession.getAuthData().xuid(); + } + + PlayerListPacket.Entry entry; + if (session.getPlayerEntity().getUuid().equals(uuid)) { + entry = new PlayerListPacket.Entry(session.getAuthData().uuid()); + } else { + entry = new PlayerListPacket.Entry(uuid); + } + + entry.setName(username); + entry.setEntityId(geyserId); + entry.setSkin(serializedSkin); + entry.setXuid(xuid); + entry.setPlatformChatId(""); + entry.setTeacher(false); + entry.setTrustedSkin(true); + return entry; + } + + private static SerializedSkin getSkin(String skinId, Skin skin, Cape cape, SkinGeometry geometry) { + try (ByteArrayInputStream stream = new ByteArrayInputStream(skin.skinData())) { + ImageData image = ImageData.from(ImageIO.read(stream)); + return SerializedSkin.of( + skinId, + "", + geometry.geometryName(), + image, + Collections.emptyList(), + ImageData.of(cape.capeData()), + geometry.geometryData(), + "", + true, + false, + false, + cape.capeId(), + skinId + ); + } catch (IOException e) { + throw new RuntimeException("Failed to read skin data", e); + } + } + + public static Cape getEmptyCapeData() { + return EMPTY_CAPE; + } + + private static int getColor(int argb) { + int r = (argb >> 16) & 0xFF; + int g = (argb >> 8) & 0xFF; + int b = argb & 0xFF; + + double[] colorLab = DeltaUtils.rgbToLab(r, g, b); + + List colors = Arrays.asList( + new int[]{249, 255, 254}, // 0: White + new int[]{249, 128, 29}, // 1: Orange + new int[]{199, 78, 189}, // 2: Magenta + new int[]{58, 179, 218}, // 3: Light Blue + new int[]{254, 216, 61}, // 4: Yellow + new int[]{128, 199, 31}, // 5: Lime + new int[]{243, 139, 170}, // 6: Pink + new int[]{71, 79, 82}, // 7: Gray + new int[]{159, 157, 151}, // 8: Light Gray + new int[]{22, 156, 156}, // 9: Cyan + new int[]{137, 50, 184}, // 10: Purple + new int[]{60, 68, 170}, // 11: Blue + new int[]{131, 84, 50}, // 12: Brown + new int[]{94, 124, 22}, // 13: Green + new int[]{176, 46, 38}, // 14: Red + new int[]{29, 29, 33} // 15: Black + ); + + int closestColorIndex = -1; + double minDeltaE = Double.MAX_VALUE; + + for (int i = 0; i < colors.size(); i++) { + int[] rgb = colors.get(i); + double[] lab = DeltaUtils.rgbToLab(rgb[0], rgb[1], rgb[2]); + double deltaE = DeltaUtils.calculateDeltaE(colorLab, lab); + if (deltaE < minDeltaE) { + minDeltaE = deltaE; + closestColorIndex = i; + } + } + + return closestColorIndex; + } + + @Subscribe + public void onEnable(GeyserPostInitializeEvent event) { + Registries.BEDROCK_PACKET_TRANSLATORS.register(NpcRequestPacket.class, new NPCFormResponseTranslator()); + loadSkins(); + ReflectionUtils.init(); + CameraPreset.load(); + + replaceTranslator(); + GEYSER_LOADED = true; + for (String registeredEntity : REGISTERED_ENTITIES) { + registerEntityToGeyser(registeredEntity); + } + for (String id : ENTITIES_WAIT_FOR_LOAD) { + registerPropertiesForGeyser(id); + } + logger().info("Defined " + LOADED_ENTITY_DEFINITIONS.size() + " entities"); + MountFix.start(); + } public void replaceTranslator() { Registries.JAVA_PACKET_TRANSLATORS @@ -233,30 +372,33 @@ public void onLoadCommand(GeyserDefineCommandsEvent event) { } public void loadSkins() { + // Clear the loaded skins LOADED_SKIN_DATA.clear(); + + // Load the skins from the skins folder File folder = this.dataFolder().resolve("skins").toFile(); if (!folder.exists()) { folder.mkdirs(); } for (File file : folder.listFiles()) { - if (file.isDirectory()) { - File textureFile = null; - File geometryFile = null; + if (!file.isDirectory()) + continue; - for (File folderFile : file.listFiles()) { - if (folderFile.getName().endsWith(".png")) { - textureFile = folderFile; - } - if (folderFile.getName().endsWith(".json")) { - geometryFile = folderFile; - } + File textureFile = null; + File geometryFile = null; + for (File folderFile : file.listFiles()) { + if (folderFile.getName().endsWith(".png")) { + textureFile = folderFile; + } + if (folderFile.getName().endsWith(".json")) { + geometryFile = folderFile; } - - loadSkin(file.getName(), geometryFile, textureFile); - } + + // Load the skin + loadSkin(file.getName(), geometryFile, textureFile); } } @@ -275,9 +417,9 @@ public void loadSkin(String skinId, File geometryFile, File textureFile) { String geoName = "{\"geometry\" :{\"default\" :\"" + geoId + "\"}}"; SkinGeometry geometry = new SkinGeometry(geoName, Files.readString(geometryFile.toPath())); LOADED_SKIN_DATA.put(skinId, new SkinData(skin, getEmptyCapeData(), geometry)); - this.logger().info("Loaded skin: " + skinId + "| geo:" + geoName); + this.logger().debug("Loaded skin: " + skinId + "| geo:" + geoName); } catch (Exception e) { - e.printStackTrace(); + throw new RuntimeException("Failed to load skin", e); } } @@ -294,52 +436,46 @@ public void onSessionQuit(SessionDisconnectEvent event) { CUSTOM_ENTITIES.remove(event.connection()); } + public void registerPacketListener(GeyserSession session) { + scheduler.schedule(() -> { + if (session.getDownstream() == null) { + registerPacketListener(session); + return; + } + + session.getDownstream().getSession().addListener(new SessionAdapter() { + @Override + public void packetSending(PacketSendingEvent event) { + Packet packet = event.getPacket(); + if (!(packet instanceof ServerboundCustomPayloadPacket payloadPacket) + || !ReflectionUtils.getChannel(payloadPacket).toString().equals("minecraft:register")) + return; - public void registerPacketListener(GeyserSession session) { + String channels = new String(payloadPacket.getData(), StandardCharsets.UTF_8); + channels = channels + "\0" + GeyserUtilsChannels.MAIN; + event.setPacket(ReflectionUtils.buildServerboundPayloadPacket("minecraft:register", channels.getBytes(StandardCharsets.UTF_8))); + } + + @Override + public void packetReceived(Session tcpSession, Packet packet) { + if (!(packet instanceof ClientboundCustomPayloadPacket payloadPacket) + || ReflectionUtils.getChannel(payloadPacket).toString().equals(GeyserUtilsChannels.MAIN)) + return; - scheduler.schedule(() -> { - if (session.getDownstream() == null) { - registerPacketListener(session); - return; - } - - session.getDownstream().getSession().addListener(new SessionAdapter() { - - @Override - public void packetSending(PacketSendingEvent event) { - Packet packet = event.getPacket(); - if (packet instanceof ServerboundCustomPayloadPacket payloadPacket) { - if (ReflectionUtils.getChannel(payloadPacket).toString().equals("minecraft:register")) { - String channels = new String(payloadPacket.getData(), StandardCharsets.UTF_8); - channels = channels + "\0" + GeyserUtilsChannels.MAIN; - event.setPacket(ReflectionUtils.buildServerboundPayloadPacket("minecraft:register", channels.getBytes(StandardCharsets.UTF_8))); - } - } - } - - @Override - public void packetReceived(Session tcpSession, Packet packet) { - if (packet instanceof ClientboundCustomPayloadPacket payloadPacket) { - if (ReflectionUtils.getChannel(payloadPacket).toString().equals(GeyserUtilsChannels.MAIN)) { - CustomPayloadPacket customPacket = packetManager.decodePacket(payloadPacket.getData()); - handleCustomPacket(session, customPacket); - } - } - } - }); - }, 80, TimeUnit.MILLISECONDS); + CustomPayloadPacket customPacket = packetManager.decodePacket(payloadPacket.getData()); + handleCustomPacket(session, customPacket); + } + }); + }, 80, TimeUnit.MILLISECONDS); } private void handleCustomPacket(GeyserSession session, CustomPayloadPacket customPacket) { if (customPacket instanceof BundlePacket bundlePacket) { bundlePacket.getPackets().forEach(p -> handleCustomPacket(session, p)); - } - - else if (customPacket instanceof CameraShakeCustomPayloadPacket cameraShakePacket) { + } else if (customPacket instanceof CameraShakeCustomPayloadPacket cameraShakePacket) { session.camera().shakeCamera(cameraShakePacket.getIntensity(), cameraShakePacket.getDuration(), CameraShake.values()[cameraShakePacket.getType()]); - } else if (customPacket instanceof NpcDialogueFormDataCustomPayloadPacket formData) { - + } else if (customPacket instanceof me.zimzaza4.geyserutils.common.packet.form.NpcDialogueFormDataCustomPayloadPacket formData) { if (formData.action().equals("CLOSE")) { NpcDialogueForm openForm = NpcDialogueForms.getOpenNpcDialogueForms(session); if (openForm != null) { @@ -362,18 +498,18 @@ else if (customPacket instanceof CameraShakeCustomPayloadPacket cameraShakePacke List