From a0613246ac91267baf3c47b79f8bc7f7b0017812 Mon Sep 17 00:00:00 2001 From: CroaBeast <66433837+CroaBeast@users.noreply.github.com> Date: Thu, 4 Jun 2026 18:25:11 -0500 Subject: [PATCH 1/6] ci: fix release coauthor parsing --- .github/workflows/release.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2e2f298..de6f605 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -156,8 +156,17 @@ jobs: local login while IFS= read -r line; do - if [[ "$line" =~ ^Co-authored-by:[[:space:]]*.*[<]([^>]+)[>][[:space:]]*$ ]]; then - email="${BASH_REMATCH[1]}" + case "$line" in + Co-authored-by:*"<"*">"*) + email="${line##*<}" + email="${email%%>*}" + ;; + *) + email="" + ;; + esac + + if [ -n "$email" ]; then login="" if [[ "$email" =~ ^[0-9]+\+([^@]+)@users\.noreply\.github\.com$ ]]; then From 5be44b14e703f59969136dedc02391cc81ac141b Mon Sep 17 00:00:00 2001 From: CroaBeast <66433837+CroaBeast@users.noreply.github.com> Date: Wed, 24 Jun 2026 18:37:11 -0500 Subject: [PATCH 2/6] chore: bump version to 1.2.7 --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 36c6526..0c91567 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } group = "com.bitaspire" -version = "1.2.6" +version = "1.2.7" repositories { mavenLocal() From 74b19dbb59c0076e3f51cbc4de72e33369ebea6d Mon Sep 17 00:00:00 2001 From: CroaBeast <66433837+CroaBeast@users.noreply.github.com> Date: Wed, 24 Jun 2026 18:40:27 -0500 Subject: [PATCH 3/6] chore: update Gradle wrapper to 9.6.0 --- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 4 ++-- gradlew.bat | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b52fb7e..eb84db6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip networkTimeout=10000 retries=0 retryBackOffMs=500 diff --git a/gradlew b/gradlew index b9bb139..249efbb 100755 --- a/gradlew +++ b/gradlew @@ -20,7 +20,7 @@ ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -29,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: diff --git a/gradlew.bat b/gradlew.bat index aa5f10b..8508ef6 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,7 +19,7 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## @@ -72,7 +72,7 @@ echo location of your Java installation. 1>&2 -@rem Execute Gradle +@rem Execute gradlew @rem endlocal doesn't take effect until after the line is parsed and variables are expanded @rem which allows us to clear the local environment before executing the java command endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel From ea06643516524e4515412e719d336e4b54e8b989 Mon Sep 17 00:00:00 2001 From: CroaBeast <66433837+CroaBeast@users.noreply.github.com> Date: Wed, 24 Jun 2026 18:40:30 -0500 Subject: [PATCH 4/6] ci: build CLV release jar without Actions artifacts --- .github/workflows/build.yml | 7 ------ .github/workflows/release.yml | 42 ++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8afa843..eaf29f2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,10 +37,3 @@ jobs: run: | VERSION=$(./gradlew -q properties | awk -F': ' '/^version:/ {print $2; exit}') echo "VERSION=$VERSION" >> "$GITHUB_ENV" - - - name: Upload CyberLevels artifact - uses: actions/upload-artifact@v4 - with: - name: CyberLevels-artifacts-${{ env.VERSION }} - if-no-files-found: error - path: build/libs/CyberLevels-${{ env.VERSION }}.jar diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index de6f605..326f062 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,37 +29,39 @@ jobs: ref: ${{ github.event.workflow_run.head_sha }} fetch-depth: 0 - - name: Download build artifact - env: - GH_TOKEN: ${{ github.token }} - RUN_ID: ${{ github.event.workflow_run.id }} + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "21" + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Build release jar + shell: bash run: | set -euo pipefail + PROJECT_NAME="CyberLevels" + chmod +x ./gradlew + ./gradlew --no-daemon clean build shadowJar - gh run download "$RUN_ID" \ - --repo "$GITHUB_REPOSITORY" \ - --dir downloaded-artifacts - - JAR=$(find downloaded-artifacts -type f \ - -name 'CyberLevels-*.jar' \ - ! -name '*-sources.jar' \ - ! -name '*-javadoc.jar' \ - -print -quit) + VERSION=$(./gradlew --no-daemon -q properties --property version | awk -F': ' '$1 == "version" { print $2; exit }') + JAR_SOURCE=$(find . -type f -path "*/build/libs/${PROJECT_NAME}-${VERSION}.jar" -print -quit) - if [ -z "$JAR" ]; then - echo "Could not find final CyberLevels jar in downloaded artifacts." - find downloaded-artifacts -type f + if [ -z "$JAR_SOURCE" ]; then + echo "Could not find final ${PROJECT_NAME} jar in build outputs." + find . -path "*/build/libs/*.jar" -type f -print exit 1 fi - VERSION=$(basename "$JAR" | sed -E 's/^CyberLevels-(.+)\.jar$/\1/') mkdir -p release-assets - cp "$JAR" "release-assets/CyberLevels-$VERSION.jar" + RELEASE_JAR="release-assets/${PROJECT_NAME}-${VERSION}.jar" + cp "$JAR_SOURCE" "$RELEASE_JAR" + echo "RELEASE_JAR=$RELEASE_JAR" >> "$GITHUB_ENV" echo "VERSION=$VERSION" >> "$GITHUB_ENV" echo "TAG=$VERSION" >> "$GITHUB_ENV" - echo "RELEASE_JAR=release-assets/CyberLevels-$VERSION.jar" >> "$GITHUB_ENV" - - name: Build release notes env: GH_TOKEN: ${{ github.token }} From 88d70b063f9b7534b99c96f1892541daf6b3a6ed Mon Sep 17 00:00:00 2001 From: CroaBeast <66433837+CroaBeast@users.noreply.github.com> Date: Wed, 24 Jun 2026 18:40:43 -0500 Subject: [PATCH 5/6] fix: track CLV placed blocks centrally --- .../java/com/bitaspire/cyberlevels/cache/EarnExp.java | 1 - .../com/bitaspire/cyberlevels/listener/Listeners.java | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java b/src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java index 00b90d3..1945e5c 100644 --- a/src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java +++ b/src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java @@ -28,7 +28,6 @@ import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.potion.PotionType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/bitaspire/cyberlevels/listener/Listeners.java b/src/main/java/com/bitaspire/cyberlevels/listener/Listeners.java index 0b8c007..1ff8045 100644 --- a/src/main/java/com/bitaspire/cyberlevels/listener/Listeners.java +++ b/src/main/java/com/bitaspire/cyberlevels/listener/Listeners.java @@ -6,10 +6,12 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.metadata.FixedMetadataValue; @@ -53,6 +55,12 @@ private void onLeave(PlayerQuitEvent event) { }; new ExpListener() { + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + private void onPlace(BlockPlaceEvent event) { + if (main.cache().antiAbuse().onlyNaturalBlocks()) + event.getBlockPlaced().setMetadata("CLV_PLACED", new FixedMetadataValue(main, true)); + } + @EventHandler private void onPistonExtend(BlockPistonExtendEvent event) { if (!event.isCancelled()) fixPlacedAbuse(event.getBlocks(), event.getDirection()); From 3c2457ef181bf51bd2ce034f68c08071d77dff47 Mon Sep 17 00:00:00 2001 From: CroaBeast <66433837+CroaBeast@users.noreply.github.com> Date: Wed, 24 Jun 2026 18:40:47 -0500 Subject: [PATCH 6/6] fix: only reward caught fish --- src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java b/src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java index 1945e5c..36db2dc 100644 --- a/src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java +++ b/src/main/java/com/bitaspire/cyberlevels/cache/EarnExp.java @@ -154,9 +154,6 @@ void onPlayerDeath(PlayerDeathEvent event) { private void onPlacing(BlockPlaceEvent event) { if (event.isCancelled()) return; - if (main.cache().antiAbuse().onlyNaturalBlocks()) - event.getBlock().setMetadata("CLV_PLACED", new FixedMetadataValue(main, true)); - sendExp(event.getPlayer(), s, BlockExpKeys.blockKey(event.getBlock(), main.serverVersion())); } @@ -330,9 +327,7 @@ private void onEnchant(EnchantItemEvent event) { events.get("fishing").setListener(s -> new Listener() { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onFishing(PlayerFishEvent event) { - final PlayerFishEvent.State state = event.getState(); - if (state != PlayerFishEvent.State.CAUGHT_FISH - && state != PlayerFishEvent.State.CAUGHT_ENTITY) + if (event.getState() != PlayerFishEvent.State.CAUGHT_FISH) return; Entity caught = event.getCaught();