diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml
new file mode 100644
index 0000000..149d2f5
--- /dev/null
+++ b/.forgejo/workflows/build.yml
@@ -0,0 +1,43 @@
+name: Build
+
+on:
+ push:
+ paths:
+ - 'src/**'
+ - '.github/**'
+ - 'build.gradle.kts'
+ - 'gradle.properties'
+ - 'settings.gradle'
+
+jobs:
+ build:
+ runs-on: arch-linux
+ env:
+ NEMESIS_VERSION_NAME: "autobuild-${{ github.sha }}"
+ NEMESIS_BUILD_CHANNEL: "autobuild"
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6.0.1
+
+ - name: Setup Java enviroment
+ uses: actions/setup-java@v5.1.0
+ with:
+ distribution: temurin
+ java-version: 21
+
+ - name: Setup Gradle
+ uses: gradle/actions/setup-gradle@v5
+
+ - name: Download CB1060
+ run: |
+ mkdir -p libs
+ curl -L -o libs/craftbukkit-1060.jar https://archive.org/download/craftbukkit1060/craftbukkit1-7-3%281060%29.jar
+
+ - name: Build with Gradle
+ run: ./gradlew buildAll
+
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v6.0.0
+ with:
+ path: build/libs/*.jar
diff --git a/.forgejo/workflows/release-build.yml b/.forgejo/workflows/release-build.yml
new file mode 100644
index 0000000..392e32e
--- /dev/null
+++ b/.forgejo/workflows/release-build.yml
@@ -0,0 +1,40 @@
+name: Release Build
+
+on:
+ release:
+ types: [published]
+
+jobs:
+ build-and-release:
+ runs-on: arch-linux
+ env:
+ NEMESIS_VERSION_NAME: "${{ github.ref_name }}"
+ NEMESIS_BUILD_CHANNEL: "production"
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6.0.1
+
+ - name: Set up Java
+ uses: actions/setup-java@v5.1.0
+ with:
+ distribution: temurin
+ java-version: 21
+
+ - name: Set up Gradle
+ uses: gradle/actions/setup-gradle@v5
+
+ - name: Download CB1060
+ run: |
+ mkdir -p libs
+ curl -L -o libs/craftbukkit-1060.jar \
+ https://archive.org/download/craftbukkit1060/craftbukkit1-7-3%281060%29.jar
+
+ - name: Build with Gradle
+ run: ./gradlew buildAll
+
+ - name: Upload JARs to release
+ uses: softprops/action-gh-release@v2.5.0
+ with:
+ files: build/libs/*.jar
+ tag_name: ${{ github.ref_name }}
+ name: ${{ github.ref_name }}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f5d4ddb..0e8199d 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -12,7 +12,7 @@ on:
jobs:
build:
- runs-on: "arch-linux"
+ runs-on: ubuntu-latest
env:
NEMESIS_VERSION_NAME: "autobuild-${{ github.sha }}"
NEMESIS_BUILD_CHANNEL: "autobuild"
diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml
index c038796..9570712 100644
--- a/.github/workflows/release-build.yml
+++ b/.github/workflows/release-build.yml
@@ -6,7 +6,7 @@ on:
jobs:
build-and-release:
- runs-on: "arch-linux"
+ runs-on: ubuntu-latest
env:
NEMESIS_VERSION_NAME: "${{ github.ref_name }}"
NEMESIS_BUILD_CHANNEL: "production"
@@ -32,9 +32,10 @@ jobs:
- name: Build with Gradle
run: ./gradlew buildAll
- - name: Upload JARs to release
- uses: softprops/action-gh-release@v2.5.0
- with:
- files: build/libs/*.jar
- tag_name: ${{ github.ref_name }}
- name: ${{ github.ref_name }}
\ No newline at end of file
+ - name: Upload artifacts to release
+ run: |
+ curl -X POST \
+ -H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \
+ -H "Content-Type: application/octet-stream" \
+ https://inspiran.beetal-castor.ts.net/git/api/v1/repos/${{ github.repository }}/releases/tags/${{ github.ref_name }}/assets \
+ --data-binary @build/libs/your-artifact.jar
\ No newline at end of file
diff --git a/README.md b/README.md
index 6751543..bf357cf 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-
+
[](https://modrinth.com/plugin/eye-of-nemesis)
[](https://github.com/adrianvic/NemesisEye/wiki)
diff --git a/build.gradle.kts b/build.gradle.kts
index 488a93d..e2d9a2e 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -59,9 +59,24 @@ mcVersions.forEach { ver ->
/* ----------------------------------------- */
dependencies {
- add("compileOnly", "io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT")
- add("r1_21CompileOnly", "io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT")
+ add("compileOnly", "io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT")
+ add("r1_21CompileOnly", "io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT")
add("b1_7_3CompileOnly", files("libs/craftbukkit-1060.jar"))
+
+ testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
+ testImplementation("org.mockito:mockito-core:5.5.0")
+ testRuntimeOnly("org.junit.platform:junit-platform-launcher")
+ testImplementation("io.papermc.paper:paper-api:1.21-R0.1-SNAPSHOT")
+ testImplementation("com.github.seeseemelk:MockBukkit-v1.21:3.102.0")
+
+ // Allow tests to see the versioned implementations
+ mcVersions.forEach { ver ->
+ testImplementation(sourceSets[ver].output)
+ }
+}
+
+tasks.test {
+ useJUnitPlatform()
}
/* ----------------------------------------- */
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java
index 19d08fb..0a86ce9 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java
@@ -2,9 +2,13 @@ package io.github.adrianvic.nemesiseye.impl;
import io.github.adrianvic.nemesiseye.Nemesis;
import io.github.adrianvic.nemesiseye.impl.commands.Eye;
+import io.github.adrianvic.nemesiseye.impl.events.BlockEventListener;
+import io.github.adrianvic.nemesiseye.impl.events.EntityEventListener;
+import io.github.adrianvic.nemesiseye.impl.events.PlayerEventListener;
import io.github.adrianvic.nemesiseye.policy.Policy;
import io.github.adrianvic.nemesiseye.policy.PolicyParsers;
import io.github.adrianvic.nemesiseye.reflection.Glimmer;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.HumanEntity;
@@ -72,6 +76,38 @@ public class b1_7_3 implements Glimmer {
return entity.getItemInHand();
}
+ @Override
+ public boolean isAir(ItemStack item) {
+ return item == null || item.getType() == Material.AIR;
+ }
+
+ @Override
+ public boolean isGliding(org.bukkit.entity.Player player) {
+ return false;
+ }
+
+ @Override
+ public void setGliding(org.bukkit.entity.Player player, boolean gliding) {
+ }
+
+ @Override
+ public boolean hasPermission(org.bukkit.command.CommandSender sender, String permission) {
+ if (sender instanceof org.bukkit.entity.Player p) {
+ return p.isOp();
+ }
+ return true; // Console always has permission
+ }
+
+ @Override
+ public boolean isArmorEquipAttempt(org.bukkit.event.Event event) {
+ return false;
+ }
+
+ @Override
+ public ItemStack getEquippedItem(org.bukkit.event.Event event) {
+ return null;
+ }
+
@Override
public void sendMessage(CommandSender commandSender, String text) {
String[] lines = text.split("\\r?\\n");
@@ -99,4 +135,18 @@ public class b1_7_3 implements Glimmer {
public boolean hasAnyEnchantment(ItemStack itemStack) {
return false;
}
+
+ @Override
+ public boolean isArmor(ItemStack item) {
+ if (item == null || item.getType() == Material.AIR) {
+ return false;
+ }
+
+ String name = item.getType().name();
+
+ return name.endsWith("_HELMET")
+ || name.endsWith("_CHESTPLATE")
+ || name.endsWith("_LEGGINGS")
+ || name.endsWith("_BOOTS");
+ }
}
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/BlockEventListener.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/BlockEventListener.java
similarity index 90%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/BlockEventListener.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/BlockEventListener.java
index 76fd2d1..6ea38bf 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/BlockEventListener.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/BlockEventListener.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl;
+package io.github.adrianvic.nemesiseye.impl.events;
import io.github.adrianvic.nemesiseye.Events;
import org.bukkit.event.block.BlockBreakEvent;
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/EntityEventListener.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/EntityEventListener.java
similarity index 89%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/EntityEventListener.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/EntityEventListener.java
index cf49da1..e6655f8 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/EntityEventListener.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/EntityEventListener.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl;
+package io.github.adrianvic.nemesiseye.impl.events;
import io.github.adrianvic.nemesiseye.Events;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/PlayerEventListener.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/PlayerEventListener.java
similarity index 86%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/PlayerEventListener.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/PlayerEventListener.java
index b77a56a..ec81484 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/PlayerEventListener.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/events/PlayerEventListener.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl;
+package io.github.adrianvic.nemesiseye.impl.events;
import io.github.adrianvic.nemesiseye.Events;
import org.bukkit.event.player.PlayerInteractEvent;
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java b/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
index ceb0e36..45ec7b5 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
@@ -7,13 +7,22 @@ import java.util.Map;
import java.util.regex.Pattern;
public class DataShifter {
-
public static boolean safeMatches(String expression, String against) {
String cleanPattern = expression.trim();
Pattern pattern = Pattern.compile(cleanPattern, Pattern.CASE_INSENSITIVE);
return pattern.matcher(against).matches();
}
+ public static boolean safeMatches(List expressions, String against) {
+ for (String s : expressions) {
+ if (DataShifter.safeMatches(s, against)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
public static List parseValueToStringList(List