diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 6be840e..8f39207 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -83,6 +83,7 @@ jobs:
26.1.1:startup
26.1.2:startup
26.2:startup
+ 26.3:startup
- name: folia Java 17
id: folia-java17
platform: folia
@@ -110,6 +111,7 @@ jobs:
cases: >-
26.1.2:startup
26.2:startup
+ 26.3:startup
name: ${{ matrix.name }}
timeout-minutes: 45
diff --git a/README.md b/README.md
index f9add5e..b067e86 100644
--- a/README.md
+++ b/README.md
@@ -16,6 +16,8 @@ integration.
> DebugStickPro requires
> [PacketEvents](https://github.com/retrooper/packetevents) 2.13.0 or later.
+> PacketEvents has no release with Minecraft 26.3 support yet, so 26.3 servers
+> need the 2.14.0 development build.
>
> The plugin is under active development. Test updates on a non-production server
> and report reproducible problems on the issue tracker.
@@ -94,9 +96,9 @@ The server owner decides which commands and modes players may use.
| Component | Requirement |
| --- | --- |
-| Server software | Spigot, Paper, or Folia from Minecraft 1.19.4 through 26.2. Paper is the primary and recommended platform. |
+| Server software | Spigot, Paper, or Folia from Minecraft 1.19.4 through 26.3. Paper is the primary and recommended platform. |
| Java runtime | The plugin targets Java 17. Run the Java version required by your chosen Minecraft server release. |
-| Required plugin | [PacketEvents](https://github.com/retrooper/packetevents) 2.13.0 or later. |
+| Required plugin | [PacketEvents](https://github.com/retrooper/packetevents) 2.13.0 or later. Minecraft 26.3 requires the 2.14.0 development build; 2.13.0 cannot load on 26.3. |
| Optional plugins | CoreProtect and PlaceholderAPI. |
VirtualEntities is bundled inside DebugStickPro and does not need to be installed
@@ -223,7 +225,7 @@ for custom locales, from English. Existing translations are preserved.
| Symptom | Check |
| --- | --- |
-| DebugStickPro does not enable | Confirm PacketEvents 2.13.0 or later is installed and enabled first. Check that the server and Java versions match the support table. |
+| DebugStickPro does not enable | Confirm PacketEvents 2.13.0 or later is installed and enabled first. On Minecraft 26.3, PacketEvents must be 2.14.0 or later. Check that the server and Java versions match the support table. |
| The stick does nothing | Hold a plugin-issued stick in the main hand; verify `debugstickpro.use`, world lists, block filters, and region protection. |
| Copy or Freeze mode is skipped | Grant `debugstickpro.mode.copy` or `debugstickpro.mode.freeze`. Grant `debugstickpro.mode` as well when the player uses the mode command. |
| A property is missing | Check `BlockDataFilter`, its per-type bypass permission, and `AllowUnsafeBisectedData`. Some properties are intentionally unavailable for safety. |
@@ -239,6 +241,11 @@ versions also run in-game command, item, display, locale, and mode tests. Spigot
protocol checkpoints are tested separately with the official BuildTools. Paper
remains the primary platform.
+Because PacketEvents only publishes its unshaded modules, the runtime tests
+reassemble the installable PacketEvents plugin JAR from the same artifacts the
+official release is built from (`integration/packetevents`). Set
+`DSP_E2E_PACKETEVENTS_VERSION` to test a different PacketEvents version.
+
## Building from source
Building requires JDK 25; the produced plugin JAR targets Java 17.
diff --git a/integration/mineflayer/run-server-e2e.sh b/integration/mineflayer/run-server-e2e.sh
index 78fa344..fd31701 100755
--- a/integration/mineflayer/run-server-e2e.sh
+++ b/integration/mineflayer/run-server-e2e.sh
@@ -13,9 +13,9 @@ readonly TEMP_DIR="$(mktemp -d)"
readonly SERVER_DIR="${TEMP_DIR}/server"
readonly CACHE_DIR="${DSP_E2E_CACHE:-${HOME}/.cache/debugstickpro-e2e}"
readonly SERVER_JAR="${DSP_E2E_SERVER_JAR:-${CACHE_DIR}/${PLATFORM}-${MINECRAFT_VERSION}.jar}"
-readonly PACKETEVENTS_JAR="${CACHE_DIR}/packetevents-spigot-2.13.0.jar"
-readonly PACKETEVENTS_URL="https://github.com/retrooper/packetevents/releases/download/v2.13.0/packetevents-spigot-2.13.0.jar"
-readonly PACKETEVENTS_SHA256="6d9ece0d87ee727a79a20b7ffbd432021609c6f52bafcb654fc2d3e9b6f064c5"
+readonly PACKETEVENTS_VERSION="${DSP_E2E_PACKETEVENTS_VERSION:-2.14.0-SNAPSHOT}"
+readonly PACKETEVENTS_JAR="${CACHE_DIR}/packetevents-spigot-${PACKETEVENTS_VERSION}.jar"
+readonly PACKETEVENTS_FIXTURE="${PROJECT_DIR}/integration/packetevents/pom.xml"
SERVER_PID=""
cleanup() {
@@ -58,10 +58,16 @@ else
echo "${server_sha256} ${SERVER_JAR}" | sha256sum --check --status
fi
-if [[ ! -f "${PACKETEVENTS_JAR}" ]] || ! echo "${PACKETEVENTS_SHA256} ${PACKETEVENTS_JAR}" | sha256sum --check --status; then
- curl --fail --silent --show-error --location "${PACKETEVENTS_URL}" --output "${PACKETEVENTS_JAR}"
+if [[ ! -f "${PACKETEVENTS_JAR}" ]]; then
+ # PacketEvents only publishes its unshaded modules, so the installable plugin
+ # JAR is reassembled from the same artifacts the official release uses.
+ mvn -B -q -f "${PACKETEVENTS_FIXTURE}" \
+ -Dpacketevents.version="${PACKETEVENTS_VERSION}" \
+ -Doutput.jar="${TEMP_DIR}/packetevents.jar" \
+ package
+ unzip -l "${TEMP_DIR}/packetevents.jar" plugin.yml >/dev/null
+ mv "${TEMP_DIR}/packetevents.jar" "${PACKETEVENTS_JAR}"
fi
-echo "${PACKETEVENTS_SHA256} ${PACKETEVENTS_JAR}" | sha256sum --check --status
find_plugin_jars() {
find "${PROJECT_DIR}/target" -maxdepth 1 -type f \
diff --git a/integration/packetevents/pom.xml b/integration/packetevents/pom.xml
new file mode 100644
index 0000000..601867d
--- /dev/null
+++ b/integration/packetevents/pom.xml
@@ -0,0 +1,92 @@
+
+
+ 4.0.0
+
+ dev.twme.debugstickpro.integration
+ packetevents-plugin
+ 1.0.0
+ jar
+
+ DebugStickPro PacketEvents test fixture
+
+
+ Builds the installable PacketEvents plugin JAR used by the server
+ integration tests. PacketEvents only publishes its unshaded modules to
+ CodeMC, so the shaded JAR that a server installs is reassembled here
+ from the same artifacts the official release is built from.
+
+
+
+ 2.14.0-SNAPSHOT
+ ${project.build.directory}/packetevents-plugin.jar
+ UTF-8
+
+
+
+
+ codemc-releases
+ https://repo.codemc.io/repository/maven-releases/
+
+
+ codemc-snapshots
+ https://repo.codemc.io/repository/maven-snapshots/
+
+
+
+
+
+ com.github.retrooper
+ packetevents-spigot
+ ${packetevents.version}
+
+
+
+ io.netty
+ *
+
+
+ org.jetbrains
+ annotations
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.6.2
+
+
+ package
+
+ shade
+
+
+ ${output.jar}
+ false
+
+
+ *:*
+
+ META-INF/MANIFEST.MF
+ META-INF/*.SF
+ META-INF/*.DSA
+ META-INF/*.RSA
+ module-info.class
+ META-INF/versions/*/module-info.class
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index d98cbcb..7ebe78c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
dev.twme
DebugStickPro
- 0.5.3
+ 0.5.4
jar
DebugStickPro
@@ -14,7 +14,7 @@
25
17
- 26.2.build.112-stable
+ 26.3.build.33-alpha
5.2.0
4.26.1
UTF-8
@@ -153,7 +153,7 @@
com.github.retrooper
packetevents-spigot
- 2.13.0
+ 2.14.0-SNAPSHOT
provided