Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
acd2a9d
1.0.4 - Placeholders and message fix
CroaBeast Nov 30, 2025
16f7d3b
1.0.4 - Make database more async
CroaBeast Nov 30, 2025
cd89471
Improve async user loading and leaderboard updates
CroaBeast Nov 30, 2025
34871fa
Merge pull request #5 from CroaBeast/codex
CroaBeast Nov 30, 2025
21065b9
1.0.4 - Move expr4j as dependency
CroaBeast Dec 1, 2025
5351db2
Initialize operators before building formulas
CroaBeast Dec 1, 2025
16e7cc8
Merge pull request #6 from CroaBeast/codex
CroaBeast Dec 1, 2025
90d394f
1.0.4 - Fix database time-outs
CroaBeast Dec 5, 2025
eeae472
1.1.1 - Action bar fix
CroaBeast Jan 18, 2026
9c898f0
1.1.2 - Minor fixes
CroaBeast Feb 1, 2026
a6d6947
Merge pull request #10 from CroaBeast/main
CroaBeast Feb 2, 2026
e8ae5a7
1.1.2 -Trying to fix placeholders
CroaBeast Feb 22, 2026
62413b0
Refactor user loading and leaderboard update logic in UserManagerImpl…
Klema4 Mar 6, 2026
12c31ca
Fix leaderboard access by using a snapshot of top players to prevent …
Klema4 Mar 6, 2026
14a5a76
chore: Move from async to sync saving on reload
Klema4 Mar 8, 2026
e9e1398
chore: Add support comments to better understand how some features work
Klema4 Mar 8, 2026
ce27c2c
Merge pull request #12 from BitAspire/klema/fix-placeholders
CroaBeast Mar 8, 2026
ad1b7b6
Merge pull request #13 from BitAspire/klema/leaderboards-exception
CroaBeast Mar 8, 2026
18fe8ac
Merge pull request #14 from BitAspire/klema/better-comments
CroaBeast Mar 8, 2026
d6490b2
Enhance CLVCommand to support user resolution by name, allowing comma…
Klema4 Apr 8, 2026
ee663e1
Update version to 1.1.3-BAP4345; enhance leaderboard functionality by…
Klema4 Apr 17, 2026
0f453d2
Implement Spigot version check feature with configurable options for …
Klema4 Apr 17, 2026
3ed1dcd
Add contributor information to plugin.yml and update README.md
Klema4 Apr 17, 2026
4e82cc2
Add XPChangeEvent handling in BaseSystem to trigger events on experie…
Klema4 Apr 17, 2026
ef35d76
Merge origin/master into klema/bap-43-45 (resolve CyberLevels, CLVCom…
Klema4 Apr 17, 2026
63f328e
Update src/main/java/com/bitaspire/cyberlevels/cache/BlockExpKeys.java
Klema4 Apr 17, 2026
1429df6
Refactor XPChangeEvent and CLVCommand for improved event handling and…
Klema4 Apr 17, 2026
b3ff65d
Merge branch 'klema/bap-43-45' of github.com:BitAspire/CyberLevels in…
Klema4 Apr 17, 2026
5f07ea3
Update src/main/java/com/bitaspire/cyberlevels/hook/PlaceholderAPI.java
Klema4 Apr 17, 2026
31963e7
Merge pull request #15 from BitAspire/klema/bap-43-45
CroaBeast Apr 17, 2026
0564d9f
Merge origin/master into main
CroaBeast Apr 17, 2026
57f375b
1.1.3 - Core updated
CroaBeast Apr 17, 2026
10f26b0
1.1.3 - Added Javadocs
CroaBeast Apr 18, 2026
4edcac1
Merge pull request #16 from BitAspire/codex/javadocs-core-sync
CroaBeast Apr 18, 2026
23f4351
Fix age-aware block exp matching
CroaBeast Apr 18, 2026
ba837cc
Merge pull request #17 from BitAspire/codex/javadocs-core-sync
CroaBeast Apr 18, 2026
58d5aac
chore: update Gradle wrapper and build plugins
CroaBeast Apr 27, 2026
8b9bfdd
feat: add 26.1+ support
CroaBeast Apr 27, 2026
2c059ea
chore: update shadow jar packaging
CroaBeast Apr 27, 2026
44fee57
fix: sync cached users with database
CroaBeast Apr 27, 2026
2c6e6c2
fix: match specific item keys
CroaBeast Apr 27, 2026
99125cc
refactor: simplify leaderboard clamp
CroaBeast Apr 27, 2026
a238397
Merge pull request #18 from BitAspire/croabeast
CroaBeast Apr 27, 2026
2e918f7
chore: bump version to 1.1.4
CroaBeast Apr 29, 2026
dcfaaf1
fix: coalesce leaderboard and database sync
CroaBeast Apr 29, 2026
60c3cd7
Merge pull request #19 from BitAspire/croabeast
CroaBeast Apr 29, 2026
c51c24f
chore: bump version to 1.1.5
CroaBeast May 2, 2026
4458621
fix(BAP-49): normalize MySQL table collation
CroaBeast May 2, 2026
8f7e75f
Merge pull request #20 from BitAspire/croabeast
CroaBeast May 2, 2026
959ef5a
chore: bump version to 1.1.6
CroaBeast May 5, 2026
ccf7a46
feat: add specific exp stacking controls
CroaBeast May 5, 2026
53944a3
Merge pull request #21 from BitAspire/main
CroaBeast May 5, 2026
c50bd08
chore: track CLV build libraries
CroaBeast May 6, 2026
f166d7b
chore: add CLV build and release workflows
CroaBeast May 6, 2026
5b5e143
chore: harden CLV release workflow
CroaBeast May 6, 2026
cac05c2
chore: use Blacksmith for CLV builds
CroaBeast May 7, 2026
9c0dc5f
Merge pull request #23 from BitAspire/croabeast
CroaBeast May 7, 2026
dd23e70
chore: track CLV Gradle wrapper jar
CroaBeast May 7, 2026
05d1047
Merge pull request #24 from BitAspire/croabeast
Klema4 May 7, 2026
61ed106
- Add H2 as a fourth database backend (file-based, MERGE-based upse…
Zsomi May 8, 2026
7d5e5c7
add: AxBooster, AxHoe, AxPickaxe
Zsomi May 8, 2026
38fc007
Merge pull request #25 from Zsomi/master
CroaBeast May 8, 2026
0c7c842
fix: remove early CLV 1.2.0 features
CroaBeast May 11, 2026
06f6153
chore: bump version to 1.2.0
CroaBeast May 11, 2026
7deca4f
feat: add H2 database backend
Zsomi May 11, 2026
ab87a3a
feat: add AxBoosters, AxHoes and AxPickaxes support
Zsomi May 11, 2026
eb80e9f
Merge pull request #26 from BitAspire/codex/clv-116-remove-early-120
Klema4 May 11, 2026
73555a0
Merge pull request #27 from BitAspire/codex/clv-120-user-features
Klema4 May 11, 2026
02a8f38
chore: bump version to 1.2.1
CroaBeast May 12, 2026
d1e0af6
chore: refresh CyberCore dependency
CroaBeast May 12, 2026
7074bf4
fix: add CLV exp event compatibility aliases
CroaBeast May 12, 2026
1a8451c
Merge pull request #28 from BitAspire/croabeast
CroaBeast May 12, 2026
1d2ed97
chore: bump version to 1.2.2
CroaBeast May 13, 2026
e265070
chore: update Gradle wrapper
CroaBeast May 13, 2026
1847bd9
chore: refresh CyberCore dependency
CroaBeast May 13, 2026
2c7da9f
chore: bump version to 1.2.3
CroaBeast May 15, 2026
93df068
fix: cache CLV tab player suggestions
CroaBeast May 15, 2026
dc343c1
refactor: simplify CLV Ax hook loading
CroaBeast May 15, 2026
3d810b9
Merge pull request #29 from BitAspire/croabeast
CroaBeast May 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Package CyberLevels

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:

permissions:
contents: read

jobs:
build:
runs-on: [blacksmith-4vcpu-ubuntu-2204]

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up JDK (Temurin 21)
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "21"

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4

- name: Make gradlew executable
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew --no-daemon clean build shadowJar

- name: Get version from Gradle
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
243 changes: 243 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,243 @@
name: Publish CyberLevels Release

on:
workflow_run:
workflows: [ "Package CyberLevels" ]
types: [ completed ]
branches: [ "master" ]

permissions:
actions: read
contents: write
pull-requests: read

concurrency:
group: cyberlevels-release-${{ github.event.workflow_run.head_branch }}
cancel-in-progress: false

jobs:
release:
if: >
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event != 'pull_request'
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
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 }}
run: |
set -euo pipefail

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)

if [ -z "$JAR" ]; then
echo "Could not find final CyberLevels jar in downloaded artifacts."
find downloaded-artifacts -type f
exit 1
fi

VERSION=$(basename "$JAR" | sed -E 's/^CyberLevels-(.+)\.jar$/\1/')
mkdir -p release-assets
cp "$JAR" "release-assets/CyberLevels-$VERSION.jar"

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 }}
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
run: |
set -euo pipefail

OWNER="${GITHUB_REPOSITORY%/*}"
REPO="${GITHUB_REPOSITORY#*/}"

git fetch --tags --force

if gh release view "$TAG" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
gh release delete "$TAG" \
--repo "$GITHUB_REPOSITORY" \
--cleanup-tag \
--yes
elif git ls-remote --exit-code --tags origin "refs/tags/$TAG" >/dev/null 2>&1; then
gh api \
--method DELETE \
"repos/$GITHUB_REPOSITORY/git/refs/tags/$TAG" || true
fi

BUMP_SUBJECT="chore: bump version to $VERSION"
BUMP_LOG=$(mktemp)
git log --format='%H%x09%s' "$HEAD_SHA" > "$BUMP_LOG"
BUMP_COMMIT=$(awk -F '\t' -v subject="$BUMP_SUBJECT" '$2 == subject { print $1; exit }' "$BUMP_LOG")

if [ -n "$BUMP_COMMIT" ]; then
if BUMP_PARENT=$(git rev-parse "$BUMP_COMMIT^" 2>/dev/null); then
RANGE="$BUMP_PARENT..$HEAD_SHA"
CHANGELOG_BASE="$BUMP_PARENT"
else
RANGE="$HEAD_SHA"
CHANGELOG_BASE="$BUMP_COMMIT"
fi
else
RELEASE_TAGS=$(gh release list \
--repo "$GITHUB_REPOSITORY" \
--exclude-drafts \
--limit 100 \
--json tagName \
--jq ".[].tagName | select(. != \"$TAG\")")

PREVIOUS_TAG=$(awk 'NF { print; exit }' <<< "$RELEASE_TAGS")

if [ -z "$PREVIOUS_TAG" ]; then
echo "Could not find '$BUMP_SUBJECT' or a previous release tag."
echo "Refusing to generate release notes from the full repository history."
exit 1
fi

RANGE="$PREVIOUS_TAG..$HEAD_SHA"
CHANGELOG_BASE="$PREVIOUS_TAG"
fi

FULL_CHANGELOG="https://github.com/$GITHUB_REPOSITORY/compare/$CHANGELOG_BASE...$TAG"

QUERY='
query($owner:String!, $repo:String!, $oid:GitObjectID!) {
repository(owner:$owner, name:$repo) {
object(oid:$oid) {
... on Commit {
messageHeadline
abbreviatedOid
author {
name
user {
login
}
}
associatedPullRequests(first: 1) {
nodes {
number
title
author {
login
}
}
}
}
}
}
}'

declare -A SEEN_PULL_REQUESTS
CONTRIBUTORS=$(mktemp)
PREVIOUS_CONTRIBUTORS=$(mktemp)

if [ -n "${CHANGELOG_BASE:-}" ] && git rev-parse "$CHANGELOG_BASE" >/dev/null 2>&1; then
git log --format='%aN' "$CHANGELOG_BASE" \
| sort -fu > "$PREVIOUS_CONTRIBUTORS"
fi

{
echo "## What's Changed"
echo
} > release-notes.md

HAS_CHANGES=false
while read -r SHA; do
[ -z "$SHA" ] && continue
HAS_CHANGES=true

DATA=$(gh api graphql \
-f query="$QUERY" \
-f owner="$OWNER" \
-f repo="$REPO" \
-F oid="$SHA")

PR_NUMBER=$(echo "$DATA" | jq -r '.data.repository.object.associatedPullRequests.nodes[0].number // empty')
PR_TITLE=$(echo "$DATA" | jq -r '.data.repository.object.associatedPullRequests.nodes[0].title // empty')
PR_AUTHOR=$(echo "$DATA" | jq -r '.data.repository.object.associatedPullRequests.nodes[0].author.login // empty')

COMMIT_TITLE=$(echo "$DATA" | jq -r '.data.repository.object.messageHeadline')
COMMIT_AUTHOR_LOGIN=$(echo "$DATA" | jq -r '.data.repository.object.author.user.login // empty')
COMMIT_AUTHOR_NAME=$(echo "$DATA" | jq -r '.data.repository.object.author.name // "unknown"')
SHORT_SHA=$(echo "$DATA" | jq -r '.data.repository.object.abbreviatedOid')

if [ -n "$PR_NUMBER" ]; then
if [ -z "${SEEN_PULL_REQUESTS[$PR_NUMBER]+x}" ]; then
echo "- $PR_TITLE by @$PR_AUTHOR in #$PR_NUMBER" >> release-notes.md
[ -n "$PR_AUTHOR" ] && echo "$PR_AUTHOR" >> "$CONTRIBUTORS"
SEEN_PULL_REQUESTS[$PR_NUMBER]=1
fi
else
if [ -n "$COMMIT_AUTHOR_LOGIN" ]; then
echo "- $COMMIT_TITLE by @$COMMIT_AUTHOR_LOGIN ($SHORT_SHA)" >> release-notes.md
echo "$COMMIT_AUTHOR_LOGIN" >> "$CONTRIBUTORS"
else
echo "- $COMMIT_TITLE by $COMMIT_AUTHOR_NAME ($SHORT_SHA)" >> release-notes.md
fi
fi
done < <(git rev-list --reverse "$RANGE")

if [ "$HAS_CHANGES" = false ]; then
echo "- No code changes detected for this release." >> release-notes.md
fi

if [ -s "$CONTRIBUTORS" ]; then
NEW_CONTRIBUTORS=$(mktemp)
sort -u "$CONTRIBUTORS" \
| grep -Fvxif "$PREVIOUS_CONTRIBUTORS" \
> "$NEW_CONTRIBUTORS" || true

if [ -s "$NEW_CONTRIBUTORS" ]; then
{
echo
echo "## New Contributors"
echo
sed 's/^/- @/' "$NEW_CONTRIBUTORS"
} >> release-notes.md
fi

{
echo
echo "## Contributors"
echo
sort -u "$CONTRIBUTORS" | sed 's/^/- @/'
} >> release-notes.md
fi

{
echo
echo "**Full Changelog**: $FULL_CHANGELOG"
} >> release-notes.md

- name: Create prerelease
env:
GH_TOKEN: ${{ github.token }}
HEAD_SHA: ${{ github.event.workflow_run.head_sha }}
run: |
set -euo pipefail

gh release create "$TAG" "$RELEASE_JAR" \
--repo "$GITHUB_REPOSITORY" \
--title "$VERSION" \
--notes-file release-notes.md \
--target "$HEAD_SHA" \
--prerelease \
--latest=false
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ build/
*.tar.gz
*.rar

!gradle/wrapper/gradle-wrapper.jar
!libraries/
!libraries/*.jar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

Expand Down Expand Up @@ -116,3 +120,4 @@ buildNumber.properties
# Common working directory
run/
/libs/
/.claude/settings.local.json
Binary file modified README.md
Binary file not shown.
Loading