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) {