diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml index 3e08962..3bcb4b3 100644 --- a/.github/workflows/build-and-publish.yml +++ b/.github/workflows/build-and-publish.yml @@ -3,9 +3,13 @@ name: Build and release plugin to CurseForge and Modrinth on: push: tags: - - 'v*' # adjust to your tagging pattern + - 'v*' workflow_dispatch: +env: + CURSEFORGE_PROJECT_ID: ${{ vars.CURSEFORGE_PROJECT_ID }} + MODRINTH_PROJECT_ID: ${{ vars.MODRINTH_PROJECT_ID }} + jobs: build: runs-on: ubuntu-latest @@ -30,7 +34,13 @@ jobs: id: jar run: | JAR_NAME=$(ls target/*.jar | grep -v 'original' | head -n 1) - echo "::set-output name=jar-path::$JAR_NAME" + echo "jar-path=$JAR_NAME" >> $GITHUB_OUTPUT + - name: Upload JAR artifact + uses: actions/upload-artifact@v4 + with: + name: plugin-jar + path: ${{ steps.jar.outputs.jar-path }} + generate-changelog: runs-on: ubuntu-latest @@ -57,16 +67,41 @@ jobs: TAG_NAME=${GITHUB_REF#refs/tags/} echo "Tag is: $TAG_NAME" if echo "$TAG_NAME" | grep -iq "release"; then - echo "::set-output name=release_type::release" + echo "release_type=release" >> $GITHUB_OUTPUT else - echo "::set-output name=release_type::beta" + echo "release_type=beta" >> $GITHUB_OUTPUT fi - publish: runs-on: ubuntu-latest needs: [build, generate-changelog] steps: + - name: Download JAR artifact + uses: actions/download-artifact@v4 + with: + name: plugin-jar + path: ./target + + - name: Extract version string + id: version + run: | + TAG_NAME=${GITHUB_REF#refs/tags/} + CLEAN_VERSION=$(echo "$TAG_NAME" | grep -oE '[0-9]+(\.[0-9]+)*(-[A-Za-z0-9]+)?') + echo "version=$CLEAN_VERSION" >> "$GITHUB_OUTPUT" + + - name: Upload to Modrinth + uses: cloudnode-pro/modrinth-publish@v2.1.2 + with: + token: ${{ secrets.MODRINTH_TOKEN }} + project: ${{ env.MODRINTH_PROJECT_ID }} + name: BasicHomes ${{ steps.version.outputs.version }} + version: ${{ steps.version.outputs.version }} + changelog: ${{ needs.generate-changelog.outputs.changelog }} + files: ${{ needs.build.outputs.jar-path }} + game-versions: '[ "1.21" ]' + loaders: '[ "bukkit", "spigot" ]' + status: listed + - name: Upload to CurseForge uses: itsmeow/curseforge-upload@v3 with: @@ -76,14 +111,4 @@ jobs: file_path: ${{ needs.build.outputs.jar-path }} changelog: ${{ needs.generate-changelog.outputs.changelog }} changelog_type: markdown - release_type: ${{ needs.generate-changelog.outputs.release_type }} - - - name: Upload to Modrinth - uses: cloudnode-pro/modrinth-publish@v1 - with: - token: ${{ secrets.MODRINTH_TOKEN }} - project_id: ${{ env.MODRINTH_PROJECT_ID }} - file: ${{ needs.build.outputs.jar-path }} - version_number: ${{ github.ref_name }} - changelog: ${{ needs.generate-changelog.outputs.changelog }} - version_type: ${{ needs.generate-changelog.outputs.release_type }} + release_type: ${{ needs.generate-changelog.outputs.release_type }} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 052637d..6a389b9 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ fr.gamecreep BasicHomes - 1.9.4-RELEASE-1.21 + 1.9.5-RELEASE-1.21.7 jar BasicHomes @@ -83,7 +83,7 @@ org.spigotmc spigot-api - 1.21.6-R0.1-SNAPSHOT + 1.21.7-R0.1-SNAPSHOT provided diff --git a/src/main/java/fr/gamecreep/basichomes/Constants.java b/src/main/java/fr/gamecreep/basichomes/Constants.java index 0f45d64..82b48c5 100644 --- a/src/main/java/fr/gamecreep/basichomes/Constants.java +++ b/src/main/java/fr/gamecreep/basichomes/Constants.java @@ -8,7 +8,7 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class Constants { - public static final String PLUGIN_VERSION = "1.9.4"; + public static final String PLUGIN_VERSION = "1.9.5"; public static final int BSTATS_PLUGIN_ID = 25429; public static final ChatColor INFO_COLOR = ChatColor.DARK_AQUA; diff --git a/src/main/java/fr/gamecreep/basichomes/files/DataStore.java b/src/main/java/fr/gamecreep/basichomes/files/DataStore.java index c0145fd..e4602ee 100644 --- a/src/main/java/fr/gamecreep/basichomes/files/DataStore.java +++ b/src/main/java/fr/gamecreep/basichomes/files/DataStore.java @@ -9,6 +9,8 @@ import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; public class DataStore { private final File file; @@ -25,14 +27,23 @@ public DataStore(final String fileName, final T defaultData, final Type type) { this.data = this.loadOrCreate(); } + @SuppressWarnings("unchecked") + private T wrapMutable(T data) { + if (data instanceof List) { + return (T) new ArrayList<>((List) data); + } + return data; + } + private T loadOrCreate() { if (!this.file.exists()) { this.saveData(this.defaultData); - return this.defaultData; + return this.wrapMutable(this.defaultData); } try (final FileReader reader = new FileReader(this.file)) { - return this.gson.fromJson(reader, this.type); + T loadedData = this.gson.fromJson(reader, this.type); + return this.wrapMutable(loadedData); } catch (IOException e) { LoggerUtils.logWarning("Failed to load data from " + this.file.getName()); return this.defaultData; diff --git a/src/main/java/fr/gamecreep/basichomes/files/PositionDataHandler.java b/src/main/java/fr/gamecreep/basichomes/files/PositionDataHandler.java index 3d21aa6..d8f4393 100644 --- a/src/main/java/fr/gamecreep/basichomes/files/PositionDataHandler.java +++ b/src/main/java/fr/gamecreep/basichomes/files/PositionDataHandler.java @@ -9,7 +9,6 @@ import javax.annotation.Nullable; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.UUID; @@ -19,7 +18,7 @@ public class PositionDataHandler { private final DataStore> dataStore; public PositionDataHandler(@NonNull final String fileName) { - this.dataStore = new DataStore<>(fileName, Collections.emptyList(), new TypeToken>(){}.getType()); + this.dataStore = new DataStore<>(fileName, new ArrayList<>(), new TypeToken>(){}.getType()); } public void create(@NonNull final SavedPosition pos) {