diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml
deleted file mode 100644
index 149d2f5..0000000
--- a/.forgejo/workflows/build.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-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
deleted file mode 100644
index 392e32e..0000000
--- a/.forgejo/workflows/release-build.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-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 0e8199d..f5d4ddb 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -12,7 +12,7 @@ on:
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: "arch-linux"
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 9570712..c038796 100644
--- a/.github/workflows/release-build.yml
+++ b/.github/workflows/release-build.yml
@@ -6,7 +6,7 @@ on:
jobs:
build-and-release:
- runs-on: ubuntu-latest
+ runs-on: "arch-linux"
env:
NEMESIS_VERSION_NAME: "${{ github.ref_name }}"
NEMESIS_BUILD_CHANNEL: "production"
@@ -32,10 +32,9 @@ jobs:
- name: Build with Gradle
run: ./gradlew buildAll
- - 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
+ - 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
diff --git a/README.md b/README.md
index 0871654..6751543 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-
+
[](https://modrinth.com/plugin/eye-of-nemesis)
[](https://github.com/adrianvic/NemesisEye/wiki)
@@ -17,8 +17,8 @@ I made this plugin as an effort to preserve a village from my private server. Or
Since version 1.0.3-SNAPSHOT, Eye of Nemesis has _reflection_, a technique that allows me to target multiple versions of the game while sharing the codebase across versions.
Currently, we support the following Minecraft versions/loaders:
-- **PaperMC** `1.21.X, 26.1.X, 26.2`
-- **Project Poseidon/Bukkit** `b1.7.3 (CB1060)`
+- **PaperMC** `1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10`
+- **Bukkit** `b1.7.3 (CB1060)`
## Performance
This plugin is not scalable as it is and will end up running unoptimized checks when your players do things with policies in effect, I made it for a server with a few friends. I'll look forward into writing more performant code after all my other priorities are implemented.
diff --git a/build.gradle.kts b/build.gradle.kts
index e2d9a2e..488a93d 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -59,24 +59,9 @@ mcVersions.forEach { ver ->
/* ----------------------------------------- */
dependencies {
- 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("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("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/docs/Nodes.md b/docs/Nodes.md
index d5b475b..57cff1d 100644
--- a/docs/Nodes.md
+++ b/docs/Nodes.md
@@ -1,5 +1,5 @@
# Nodes
-Nodes narrow down even further if an action can be done or not. A node needs _properties_ to know what it should check against, for example, a HIT node needs a _list_ of blocks that it will check if the player is holding; while a USE_ENCHANTMENT node needs a mapping of enchantment to level. Some nodes like GLYDE don't need a value and will ignore if you provide one.
+Nodes narrow down even further if an action can be done or not. A node needs _properties_ to know what it should check against, for example, a HIT node needs a _list_ of blocks that it will check if the player is holding; while a USE_ENCHANTMENT node needs a mapping of enchantment to level. Some nodes like glyde don't need a value and will ignore if you provide one.
```yaml
nodes:
- [HIT]:
@@ -31,13 +31,4 @@ Triggered on `InventoryClickEvent` and `PlayerInteractEvent` (only if item is an
Triggered on `PlayerMoveEvent`, returns true if player is gliding.
### USE_ENCHANTMENT
-Triggered on `BlockBreakEvent` and `onEntityDamageByEntityEvent`, returns true when the used item has an enchantment matching the provided mapping of enchantment-level.
-
-### FORMBLOCK
-Triggered on `BlockFormEvent` (ex. triggers when snow is formed from rain), returns true when the block being formed is in the provided list of materials.
-
-### ENDERMAN_ATTACK_PLAYER
-Triggered on `EndermanAttackPlayerEvent` (from actions other than hitting the Enderman), returns true.
-
-### TAKE_LECTURN_BOOK
-Triggered on `PlayerTakeLecturnBookEvent`, returns true.
\ No newline at end of file
+Triggered on `BlockBreakEvent` and `onEntityDamageByEntityEvent`, returns true the used item has an enchantment matching the provided mapping of enchantment-level.
\ No newline at end of file
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/BlockEventListener.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/BlockEventListener.java
similarity index 88%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/BlockEventListener.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/BlockEventListener.java
index b09458f..76fd2d1 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/BlockEventListener.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/BlockEventListener.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl.v1_7_3.events;
+package io.github.adrianvic.nemesiseye.impl;
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/v1_7_3/ConfigurationEx.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/ConfigurationEx.java
similarity index 98%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/ConfigurationEx.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/ConfigurationEx.java
index 6fc8e27..a4b3327 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/ConfigurationEx.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/ConfigurationEx.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl.v1_7_3;
+package io.github.adrianvic.nemesiseye.impl;
import io.github.adrianvic.nemesiseye.Nemesis;
import org.bukkit.plugin.java.JavaPlugin;
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/EntityEventListener.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/EntityEventListener.java
similarity index 88%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/EntityEventListener.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/EntityEventListener.java
index e342969..cf49da1 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/EntityEventListener.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/EntityEventListener.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl.v1_7_3.events;
+package io.github.adrianvic.nemesiseye.impl;
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/v1_7_3/Log.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/Log.java
similarity index 95%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/Log.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/Log.java
index e06b33c..ccba8b1 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/Log.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/Log.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl.v1_7_3;
+package io.github.adrianvic.nemesiseye.impl;
import static org.bukkit.Bukkit.getServer;
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/PlayerEventListener.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/PlayerEventListener.java
similarity index 84%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/PlayerEventListener.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/PlayerEventListener.java
index 2ec8343..b77a56a 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/events/PlayerEventListener.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/PlayerEventListener.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl.v1_7_3.events;
+package io.github.adrianvic.nemesiseye.impl;
import io.github.adrianvic.nemesiseye.Events;
import org.bukkit.event.player.PlayerInteractEvent;
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/b1_7_3.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java
similarity index 60%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/b1_7_3.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java
index 97ad260..19d08fb 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/b1_7_3.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java
@@ -1,16 +1,10 @@
-package io.github.adrianvic.nemesiseye.impl.v1_7_3;
+package io.github.adrianvic.nemesiseye.impl;
import io.github.adrianvic.nemesiseye.Nemesis;
-import io.github.adrianvic.nemesiseye.impl.v1_7_3.commands.Eye;
-import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.BlockEventListener;
-import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.EntityEventListener;
-import io.github.adrianvic.nemesiseye.impl.v1_7_3.events.PlayerEventListener;
-import io.github.adrianvic.nemesiseye.policy.Action;
-import io.github.adrianvic.nemesiseye.policy.NodeHandler;
+import io.github.adrianvic.nemesiseye.impl.commands.Eye;
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;
@@ -21,7 +15,6 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -70,7 +63,6 @@ public class b1_7_3 implements Glimmer {
pm = Nemesis.getInstance().getPluginManager();
pm.registerEvent(Event.Type.ENTITY_DAMAGE, new EntityEventListener(), Event.Priority.Normal, plugin);
pm.registerEvent(Event.Type.BLOCK_BREAK, new BlockEventListener(), Event.Priority.Normal, plugin);
- pm.registerEvent(Event.Type.BLOCK_PLACE, new BlockEventListener(), Event.Priority.Normal, plugin);
pm.registerEvent(Event.Type.PLAYER_INTERACT, new PlayerEventListener(), Event.Priority.Normal, plugin);
plugin.getCommand("eye").setExecutor(new Eye());
}
@@ -80,43 +72,6 @@ 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 Map getExtraHandlers() {
- return new HashMap<>();
- }
-
@Override
public void sendMessage(CommandSender commandSender, String text) {
String[] lines = text.split("\\r?\\n");
@@ -144,18 +99,4 @@ 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/v1_7_3/commands/Eye.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
similarity index 89%
rename from src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/commands/Eye.java
rename to src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
index c547c8f..b3db3e5 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/commands/Eye.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
@@ -1,4 +1,4 @@
-package io.github.adrianvic.nemesiseye.impl.v1_7_3.commands;
+package io.github.adrianvic.nemesiseye.impl.commands;
import io.github.adrianvic.nemesiseye.commands.EyeCore;
import org.bukkit.command.Command;
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java b/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
index 45ec7b5..ceb0e36 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
@@ -7,22 +7,13 @@ 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