From 1f923283d8fa43ed8af045fa7ef6e7bd400db9c3 Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Sat, 13 Dec 2025 15:40:54 -0300
Subject: [PATCH 01/38] Set GitHub Sponsors username to 'adrianvic'
Updated GitHub Sponsors username in FUNDING.yml
---
.github/FUNDING.yml | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 .github/FUNDING.yml
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..ac1941e
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,15 @@
+# These are supported funding model platforms
+
+github: adrianvic
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
+polar: # Replace with a single Polar username
+buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
+thanks_dev: # Replace with a single thanks.dev username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
From 7f65a8605d24d6cf0812c8c3a3e1705b83851518 Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Sat, 13 Dec 2025 17:13:32 -0300
Subject: [PATCH 02/38] Add image to README for Eye of Nemesis plugin
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index d221c72..b4da786 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+
+
# Eye of Nemesis
Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.
From 7a3aa34b43c5febbf6b76daabc9cc57c38474300 Mon Sep 17 00:00:00 2001
From: adrian
Date: Sun, 14 Dec 2025 14:51:33 -0300
Subject: [PATCH 03/38] Fixed EntityDamageByEntity not triggering because the
method was not overriding and checked against the correct event.
---
build.gradle.kts | 2 +-
.../adrianvic/nemesiseye/impl/EntityEventListener.java | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/build.gradle.kts b/build.gradle.kts
index 28061f0..d3f7b54 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -51,7 +51,7 @@ mcVersions.forEach { ver ->
/* ----------------------------------------- */
dependencies {
- add("compileOnly", "io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT")
+ add("compileOnly", files("libs/craftbukkit-1060.jar"))
add("r1_21CompileOnly", "io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT")
add("b1_7_3CompileOnly", files("libs/craftbukkit-1060.jar"))
}
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/EntityEventListener.java
index c1e8966..cf49da1 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/EntityEventListener.java
@@ -2,12 +2,12 @@ package io.github.adrianvic.nemesiseye.impl;
import io.github.adrianvic.nemesiseye.Events;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityListener;
public class EntityEventListener extends EntityListener {
- public void onEntityDamage(EntityDamageByEntityEvent event) {
-// Events.onEntityDamageByEntityEvent(event);
- event.setCancelled(true);
+ @Override
+ public void onEntityDamage(EntityDamageEvent event) {
+ if (event instanceof EntityDamageByEntityEvent e) Events.onEntityDamageByEntityEvent(e);
}
-}
-
+}
\ No newline at end of file
From a5adc828dc3e5de836789d343e19ee54df3f2eb8 Mon Sep 17 00:00:00 2001
From: adrian
Date: Sun, 14 Dec 2025 16:01:15 -0300
Subject: [PATCH 04/38] Fixed some warnings.
---
build.gradle.kts | 2 +-
.../adrianvic/nemesiseye/impl/PlayerEventListener.java | 2 --
.../java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java | 1 +
.../io/github/adrianvic/nemesiseye/impl/commands/Eye.java | 2 +-
src/main/java/io/github/adrianvic/nemesiseye/Config.java | 8 ++++----
src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java | 1 -
.../io/github/adrianvic/nemesiseye/commands/EyeCore.java | 2 +-
.../adrianvic/nemesiseye/commands/sub/PolicyInfo.java | 1 -
.../nemesiseye/policy/handlers/useEnchantment.java | 2 +-
.../adrianvic/nemesiseye/policy/handlers/useItem.java | 2 +-
.../io/github/adrianvic/nemesiseye/impl/commands/Eye.java | 3 +--
.../java/io/github/adrianvic/nemesiseye/impl/r1_21.java | 7 ++-----
12 files changed, 13 insertions(+), 20 deletions(-)
diff --git a/build.gradle.kts b/build.gradle.kts
index d3f7b54..28061f0 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -51,7 +51,7 @@ mcVersions.forEach { ver ->
/* ----------------------------------------- */
dependencies {
- add("compileOnly", files("libs/craftbukkit-1060.jar"))
+ 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"))
}
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/PlayerEventListener.java
index c45789a..b77a56a 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/PlayerEventListener.java
@@ -1,8 +1,6 @@
package io.github.adrianvic.nemesiseye.impl;
import io.github.adrianvic.nemesiseye.Events;
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.event.block.BlockListener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerListener;
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 f8d6fc8..68783b1 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
@@ -18,6 +18,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+@SuppressWarnings("unused")
public class b1_7_3 implements Glimmer {
JavaPlugin plugin;
PluginManager pm;
diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
index c1f5da7..b3db3e5 100644
--- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
@@ -6,7 +6,7 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
public class Eye implements CommandExecutor {
- private EyeCore core;
+ private final EyeCore core;
public Eye() {
core = new EyeCore();
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/Config.java b/src/main/java/io/github/adrianvic/nemesiseye/Config.java
index 5e286cd..52bc4dc 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/Config.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/Config.java
@@ -9,7 +9,7 @@ import java.util.List;
public class Config {
private static Config instance = new Config();
- private Glimmer glim = Nemesis.getInstance().getGlimmer();
+ private final Glimmer glim = Nemesis.getInstance().getGlimmer();
private File file;
private List policies = new ArrayList<>();
@@ -17,10 +17,10 @@ public class Config {
private Config() {}
public void load() {
- List newPolicies = glim.loadPoliciesFromFile(glim.loadConfigFile());
- policies = newPolicies;
+ policies = glim.loadPoliciesFromFile(glim.loadConfigFile());
}
-
+// TODO: Implement config saving
+//
// public void save() {
// try {
// config.save(file);
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java b/src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java
index b2bb00c..d232213 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java
@@ -1,6 +1,5 @@
package io.github.adrianvic.nemesiseye;
-import io.github.adrianvic.nemesiseye.commands.EyeCore;
import io.github.adrianvic.nemesiseye.reflection.Glimmer;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java
index 666bfab..38be35b 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java
@@ -49,5 +49,5 @@ public class EyeCore {
return List.of();
}
- public Map getSubs() { return subs; };
+ public Map getSubs() { return subs; }
}
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java
index d9460e5..20576cf 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java
@@ -2,7 +2,6 @@ package io.github.adrianvic.nemesiseye.commands.sub;
import io.github.adrianvic.nemesiseye.Config;
import io.github.adrianvic.nemesiseye.policy.Policy;
-import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import java.util.ArrayList;
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/useEnchantment.java b/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/useEnchantment.java
index 50df134..e34c28f 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/useEnchantment.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/useEnchantment.java
@@ -10,7 +10,7 @@ import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemStack;
public class useEnchantment implements NodeHandler {
- private Glimmer glim = Nemesis.getInstance().getGlimmer();
+ private final Glimmer glim = Nemesis.getInstance().getGlimmer();
@Override
public boolean allows(HumanEntity entity, PolicyNode node, Action action) {
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/useItem.java b/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/useItem.java
index d956816..a28a700 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/useItem.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/useItem.java
@@ -10,7 +10,7 @@ import org.bukkit.entity.HumanEntity;
public class useItem implements NodeHandler {
- private Glimmer glim = Nemesis.getInstance().getGlimmer();
+ private final Glimmer glim = Nemesis.getInstance().getGlimmer();
@Override
public boolean allows(HumanEntity entity, PolicyNode node, Action action) {
diff --git a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
index ca8c0ac..e28b412 100644
--- a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
+++ b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/commands/Eye.java
@@ -1,7 +1,6 @@
package io.github.adrianvic.nemesiseye.impl.commands;
import io.github.adrianvic.nemesiseye.commands.EyeCore;
-import io.github.adrianvic.nemesiseye.commands.sub.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@@ -12,7 +11,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.*;
public class Eye implements CommandExecutor, TabCompleter {
- private EyeCore core;
+ private final EyeCore core;
public Eye() {
core = new EyeCore();
diff --git a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java
index 43d65dc..2d735eb 100644
--- a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java
+++ b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java
@@ -1,6 +1,5 @@
package io.github.adrianvic.nemesiseye.impl;
-import io.github.adrianvic.nemesiseye.DataShifter;
import io.github.adrianvic.nemesiseye.Nemesis;
import io.github.adrianvic.nemesiseye.impl.commands.Eye;
import io.github.adrianvic.nemesiseye.policy.Policy;
@@ -20,6 +19,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+@SuppressWarnings("unused")
public class r1_21 implements Glimmer {
@Override
public File loadConfigFile() {
@@ -86,10 +86,7 @@ public class r1_21 implements Glimmer {
@Override
public boolean hasItemMeta(ItemStack item) {
- if (item.getItemMeta() == null) {
- return false;
- }
- return true;
+ return item.getItemMeta() != null;
}
@Override
From 42ab7e4d8964872d413f9b80d3407a9d067d34c6 Mon Sep 17 00:00:00 2001
From: adrian
Date: Sun, 14 Dec 2025 16:25:18 -0300
Subject: [PATCH 05/38] Fixed attackWith that was returning !node.isWhitelist()
instead of true whe it's not in effect.
---
.../github/adrianvic/nemesiseye/policy/handlers/attackWith.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/attackWith.java b/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/attackWith.java
index c4e159b..db54c09 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/attackWith.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/policy/handlers/attackWith.java
@@ -20,6 +20,6 @@ public class attackWith implements NodeHandler {
if (matches) return node.isWhitelist();
}
}
- return !node.isWhitelist();
+ return true;
}
}
From df606000732705d7fab91bf9ba28901c5f7aa967 Mon Sep 17 00:00:00 2001
From: adrian
Date: Sun, 14 Dec 2025 23:36:20 -0300
Subject: [PATCH 06/38] Preparing Gradle build for automatic build from
Actions.
---
build.gradle.kts | 14 +++++++++++++-
src/b1_7_3/resources/plugin.yml | 2 +-
src/r1_21/resources/plugin.yml | 2 +-
3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/build.gradle.kts b/build.gradle.kts
index 28061f0..b7eea0c 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -4,7 +4,7 @@ plugins {
}
group = "io.github.adrianvic"
-version = "1.0.3-SNAPSHOT"
+version = System.getenv("NEMESIS_VERSION_NAME")?.take(7) ?: "1.0.3-SNAPSHOT"
repositories {
mavenCentral()
@@ -24,6 +24,14 @@ val mcVersions = listOf(
/* CREATE SOURCE SET PER VERSION */
/* ----------------------------------------- */
+tasks.withType {
+ inputs.property("version", project.version)
+
+ filesMatching("plugin.yml") {
+ expand("version" to project.version)
+ }
+}
+
mcVersions.forEach { ver ->
val ss = sourceSets.create(ver) {
java.srcDir("src/$ver/java")
@@ -76,6 +84,10 @@ mcVersions.forEach { ver ->
}
}
+tasks.register("buildAll") {
+ dependsOn(tasks.withType())
+}
+
/* ----------------------------------------- */
/* JAVA SETTINGS */
/* ----------------------------------------- */
diff --git a/src/b1_7_3/resources/plugin.yml b/src/b1_7_3/resources/plugin.yml
index e9c90d2..3ed24e7 100644
--- a/src/b1_7_3/resources/plugin.yml
+++ b/src/b1_7_3/resources/plugin.yml
@@ -1,5 +1,5 @@
name: "Eye-of-Nemesis"
-version: '1.0.3-SNAPSHOT'
+version: ${version}
main: io.github.adrianvic.nemesiseye.Nemesis
author: 'Adrian Victor'
description: "Change what players can do based in custom criteria."
diff --git a/src/r1_21/resources/plugin.yml b/src/r1_21/resources/plugin.yml
index ec04a6b..da9278b 100644
--- a/src/r1_21/resources/plugin.yml
+++ b/src/r1_21/resources/plugin.yml
@@ -1,5 +1,5 @@
name: "Eye-of-Nemesis"
-version: '1.0.3-SNAPSHOT'
+version: ${version}
main: io.github.adrianvic.nemesiseye.Nemesis
api-version: '1.21'
author: 'Adrian Victor'
From 6bce18a04de51c1c4651e28f64e2c22de89acab4 Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Sun, 14 Dec 2025 23:36:36 -0300
Subject: [PATCH 07/38] Create build.yml
---
.github/workflows/build.yml | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 .github/workflows/build.yml
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..8d4c4ca
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,27 @@
+name: Build
+
+on: [push]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6.0.1
+
+ - name: Setup Java enviroment
+ uses: actions/setup-java@v5.1.0
+ with:
+ distribution: termurin
+ java-version: 21
+
+ - name: Setup Gradle
+ uses: gradle/actions@v5.0.0
+
+ - name: Build with Gradle
+ run: ./gradlew buildAll
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v6.0.0
+ with:
+ path: build/libs/*.jar
From f37ba38178ac882284db1dc40011a0ced9bbc9d5 Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Sun, 14 Dec 2025 23:40:04 -0300
Subject: [PATCH 08/38] Fix typo in Java distribution name
---
.github/workflows/build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8d4c4ca..9ac4c60 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -12,7 +12,7 @@ jobs:
- name: Setup Java enviroment
uses: actions/setup-java@v5.1.0
with:
- distribution: termurin
+ distribution: temurin
java-version: 21
- name: Setup Gradle
From 2ce90cd14a83f16d3a3607d52ebce535281a8a6b Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Sun, 14 Dec 2025 23:41:27 -0300
Subject: [PATCH 09/38] Update build.yml
---
.github/workflows/build.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9ac4c60..264bd14 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -16,7 +16,7 @@ jobs:
java-version: 21
- name: Setup Gradle
- uses: gradle/actions@v5.0.0
+ uses: gradle/actions/setup-gradle@v5
- name: Build with Gradle
run: ./gradlew buildAll
From fcafe470aa132f28766cb416751618fda683942d Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Sun, 14 Dec 2025 23:52:07 -0300
Subject: [PATCH 10/38] Update build.yml
---
.github/workflows/build.yml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 264bd14..7dcee92 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -17,7 +17,12 @@ jobs:
- 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
From 5302092596d871fda193c120e17c6788ed02728e Mon Sep 17 00:00:00 2001
From: adrian
Date: Mon, 15 Dec 2025 00:21:00 -0300
Subject: [PATCH 11/38] Build now concats "autobuild-" the commit sha to make
the version string and sets unused build channel variable for future
implementation.
Added badges to README.
---
.github/workflows/build.yml | 4 ++++
README.md | 12 +++++++++++-
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 7dcee92..9821057 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -26,7 +26,11 @@ jobs:
- name: Build with Gradle
run: ./gradlew buildAll
+
- name: Upload artifacts
uses: actions/upload-artifact@v6.0.0
with:
path: build/libs/*.jar
+ env:
+ NEMESIS_VERSION_NAME: "autobuild-${{ github.sha }}"
+ NEMESIS_BUILD_CHANNEL: "autobuild"
\ No newline at end of file
diff --git a/README.md b/README.md
index b4da786..4d8a7bf 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,24 @@
+[](https://github.com/adrianvic/NemesisEye/actions/workflows/build.yml)
+
+
# Eye of Nemesis
Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.
## Warnings
-- Even though running `/eye` will tell you to run `/eye help` to list all available commands, this is not implemented yet, however all commands are available as tab-complete of `/eye`.
- This plugin is in a very early stage.
+- Even though running `/eye` will tell you to run `/eye help` to list all available commands, this is not implemented yet, however all commands are available as tab-complete of `/eye`.
## Motivations
I made this plugin as an effort to preserve a village from my private server. Originally from beta 1.7.3 Betalands server, then transferred to RetroMC, and then finally we downloaded the chunks to merge into our server, I was afraid it would not have the same feeling after all the updates, so I had the idea to make a plugin that can block the newer features.
+## Game version and loaders
+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, 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.
From 75b0259943af91bb16d0174dfa7918167ea34252 Mon Sep 17 00:00:00 2001
From: adrian
Date: Mon, 15 Dec 2025 00:23:43 -0300
Subject: [PATCH 12/38] Fix build workflow env injecting.
---
.github/workflows/build.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9821057..55bea5f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -5,6 +5,9 @@ on: [push]
jobs:
build:
runs-on: ubuntu-latest
+ env:
+ NEMESIS_VERSION_NAME: "autobuild-${{ github.sha }}"
+ NEMESIS_BUILD_CHANNEL: "autobuild"
steps:
- name: Checkout
uses: actions/checkout@v6.0.1
@@ -30,7 +33,4 @@ jobs:
- name: Upload artifacts
uses: actions/upload-artifact@v6.0.0
with:
- path: build/libs/*.jar
- env:
- NEMESIS_VERSION_NAME: "autobuild-${{ github.sha }}"
- NEMESIS_BUILD_CHANNEL: "autobuild"
\ No newline at end of file
+ path: build/libs/*.jar
\ No newline at end of file
From 6250c48d815d2e76e34e170732b41a324b8a2cdb Mon Sep 17 00:00:00 2001
From: adrian
Date: Mon, 15 Dec 2025 00:27:03 -0300
Subject: [PATCH 13/38] Stop truncating the version string in the gradle build
file.
---
build.gradle.kts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.gradle.kts b/build.gradle.kts
index b7eea0c..694a1db 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -4,7 +4,7 @@ plugins {
}
group = "io.github.adrianvic"
-version = System.getenv("NEMESIS_VERSION_NAME")?.take(7) ?: "1.0.3-SNAPSHOT"
+version = System.getenv("NEMESIS_VERSION_NAME") ?: "1.0.3-SNAPSHOT"
repositories {
mavenCentral()
From 616a4b92e5376949c71f643b80517d46f79d96be Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Mon, 15 Dec 2025 00:42:21 -0300
Subject: [PATCH 14/38] More badges!
---
README.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 4d8a7bf..c0f562c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
-[](https://github.com/adrianvic/NemesisEye/actions/workflows/build.yml)

+[](https://github.com/adrianvic/NemesisEye/actions/workflows/build.yml)
+
+
+
# Eye of Nemesis
Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.
From 8ee5891dbac2939491f07f913e15ea818ca3ce72 Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Mon, 15 Dec 2025 00:47:44 -0300
Subject: [PATCH 15/38] Fix badges links.
---
README.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index c0f562c..ca7f2cb 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,10 @@
-
+[](https://modrinth.com/plugin/eye-of-nemesis)
[](https://github.com/adrianvic/NemesisEye/actions/workflows/build.yml)
-
-
-
+[](https://github.com/adrianvic/NemesisEye/releases)
+[](https://github.com/adrianvic/NemesisEye/wiki)
+[](https://mgr.rf.gd/w/Eye_of_Nemesis)
# Eye of Nemesis
Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.
From 21df2cc7bfbeeac93ea591a4b5c2e268ba4e7668 Mon Sep 17 00:00:00 2001
From: Tenkuma <85490958+adrianvic@users.noreply.github.com>
Date: Mon, 15 Dec 2025 00:54:44 -0300
Subject: [PATCH 16/38] Run build only when pushing changes to src/**,
.github/** and Gradle files.
---
.github/workflows/build.yml | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 55bea5f..c3c036b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,6 +1,13 @@
name: Build
-on: [push]
+on:
+ push:
+ paths:
+ - 'src/**'
+ - '.github/**'
+ - 'build.gradle.kts'
+ - 'gradle.properties'
+ - 'settings.gradle'
jobs:
build:
@@ -33,4 +40,4 @@ jobs:
- name: Upload artifacts
uses: actions/upload-artifact@v6.0.0
with:
- path: build/libs/*.jar
\ No newline at end of file
+ path: build/libs/*.jar
From 0b04c0553a8b196b9d93f3fcc21989f26eadedb0 Mon Sep 17 00:00:00 2001
From: adrian
Date: Mon, 15 Dec 2025 02:09:09 -0300
Subject: [PATCH 17/38] Add sendCommand() on Glimmer because beta does not
break line on sendMessage() line break.
Subcommands are now mapped in the class Commands.
Add usage() and description() to Subcommand.
Add help command.
---
README.md | 7 ++-
.../adrianvic/nemesiseye/impl/b1_7_3.java | 9 ++++
.../nemesiseye/commands/Commands.java | 26 ++++++++++
.../nemesiseye/commands/EyeCore.java | 25 ++++------
.../commands/sub/CurrentPolicies.java | 15 ++++--
.../nemesiseye/commands/sub/Help.java | 47 +++++++++++++++++++
.../nemesiseye/commands/sub/ListPolicies.java | 16 ++++---
.../nemesiseye/commands/sub/PolicyInfo.java | 19 ++++++--
.../nemesiseye/commands/sub/Reload.java | 10 ++--
.../nemesiseye/commands/sub/Subcommand.java | 3 +-
.../nemesiseye/reflection/Glimmer.java | 15 ++++--
.../adrianvic/nemesiseye/impl/r1_21.java | 6 +++
12 files changed, 154 insertions(+), 44 deletions(-)
create mode 100644 src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java
create mode 100644 src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java
diff --git a/README.md b/README.md
index 4d8a7bf..7223155 100644
--- a/README.md
+++ b/README.md
@@ -3,13 +3,12 @@
[](https://github.com/adrianvic/NemesisEye/actions/workflows/build.yml)

+> [!IMPORTANT]
+> This project is in a early stage, please report any bug you find.
+
# Eye of Nemesis
Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.
-## Warnings
-- This plugin is in a very early stage.
-- Even though running `/eye` will tell you to run `/eye help` to list all available commands, this is not implemented yet, however all commands are available as tab-complete of `/eye`.
-
## Motivations
I made this plugin as an effort to preserve a village from my private server. Originally from beta 1.7.3 Betalands server, then transferred to RetroMC, and then finally we downloaded the chunks to merge into our server, I was afraid it would not have the same feeling after all the updates, so I had the idea to make a plugin that can block the newer features.
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 68783b1..7ef72cf 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
@@ -7,6 +7,7 @@ import io.github.adrianvic.nemesiseye.policy.PolicyParsers;
import io.github.adrianvic.nemesiseye.policy.policies.LocationPolicy;
import io.github.adrianvic.nemesiseye.reflection.Glimmer;
import org.bukkit.World;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
@@ -89,6 +90,14 @@ public class b1_7_3 implements Glimmer {
return entity.getItemInHand();
}
+ @Override
+ public void sendMessage(CommandSender commandSender, String text) {
+ String[] lines = text.split("\\r?\\n");
+ for (String line : lines) {
+ commandSender.sendMessage(line);
+ }
+ }
+
@Override
public boolean hasItemMeta(ItemStack item) {
return false;
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java
new file mode 100644
index 0000000..cc5e497
--- /dev/null
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java
@@ -0,0 +1,26 @@
+package io.github.adrianvic.nemesiseye.commands;
+
+import io.github.adrianvic.nemesiseye.commands.sub.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Commands {
+ private static final Map commands = new HashMap<>();
+
+ static {
+ commands.put("help", new Help());
+ commands.put("listpolicies", new ListPolicies());
+ commands.put("currentpolicies", new CurrentPolicies());
+ commands.put("policyinfo", new PolicyInfo());
+ commands.put("reload", new Reload());
+ }
+
+ public static Map getAll() {
+ return commands;
+ }
+
+ public static Subcommand get(String type) {
+ return commands.get(type);
+ }
+}
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java
index 38be35b..542bdc0 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java
@@ -2,33 +2,26 @@ package io.github.adrianvic.nemesiseye.commands;
import io.github.adrianvic.nemesiseye.Nemesis;
import io.github.adrianvic.nemesiseye.commands.sub.*;
+import io.github.adrianvic.nemesiseye.reflection.Glimmer;
+import io.github.adrianvic.nemesiseye.commands.Commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import java.util.*;
public class EyeCore {
- public final Map subs = new HashMap<>();
+ private final Glimmer glim = Nemesis.getInstance().getGlimmer();
- public EyeCore() {
- register(new Reload());
- register(new ListPolicies());
- register(new PolicyInfo());
- register(new CurrentPolicies());
- }
-
- private void register(Subcommand sub) {
- subs.put(sub.name(), sub);
- }
+ public EyeCore() {}
public boolean onCommand(CommandSender commandSender, Command command, String s, String [] strings) {
if (strings.length == 0) {
- commandSender.sendMessage("""
+ glim.sendMessage(commandSender, """
Eye of Nemesis version %s
Usage: '/eye '
Use '/eye help' for a list of available commands
""".formatted(Nemesis.getInstance().getDescription().getVersion()));
} else {
- Subcommand sub = subs.get(strings[0].toLowerCase());
+ Subcommand sub = Commands.get(strings[0].toLowerCase());
if (sub == null) {
commandSender.sendMessage("Unknown command, try '/eye help' to list available commands.");
return true;
@@ -40,14 +33,12 @@ public class EyeCore {
public List onTabComplete(CommandSender commandSender, Command command, String s, String [] strings) {
if (strings.length == 1) {
- return new ArrayList<>(subs.keySet());
+ return new ArrayList<>(Commands.getAll().keySet());
}
- Subcommand sub = subs.get(strings[0].toLowerCase());
+ Subcommand sub = Commands.get(strings[0].toLowerCase());
if (sub != null) {
return sub.onTabComplete(commandSender, Arrays.copyOfRange(strings, 1, strings.length));
}
return List.of();
}
-
- public Map getSubs() { return subs; }
}
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/CurrentPolicies.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/CurrentPolicies.java
index 09fa798..ba77e73 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/CurrentPolicies.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/CurrentPolicies.java
@@ -9,11 +9,6 @@ import java.util.ArrayList;
import java.util.List;
public class CurrentPolicies implements Subcommand {
- @Override
- public String name() {
- return "currentpolicies";
- }
-
@Override
public boolean execute(CommandSender commandSender, String[] args) {
List policies = Validator.getPoliciesForEntity((HumanEntity) commandSender);
@@ -34,4 +29,14 @@ public class CurrentPolicies implements Subcommand {
public List onTabComplete(CommandSender sender, String[] args) {
return List.of();
}
+
+ @Override
+ public String description() {
+ return "Lists policies appliying to you.";
+ }
+
+ @Override
+ public String usage() {
+ return "";
+ }
}
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java
new file mode 100644
index 0000000..2ef436e
--- /dev/null
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java
@@ -0,0 +1,47 @@
+package io.github.adrianvic.nemesiseye.commands.sub;
+
+import io.github.adrianvic.nemesiseye.Nemesis;
+import io.github.adrianvic.nemesiseye.commands.Commands;
+import io.github.adrianvic.nemesiseye.reflection.Glimmer;
+import org.bukkit.command.CommandSender;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class Help implements Subcommand {
+ private final Glimmer glim = Nemesis.getInstance().getGlimmer();
+
+ @Override
+ public boolean execute(CommandSender commandSender, String[] strings) {
+ List rstr = new ArrayList<>();
+ Map allSubcommands = Commands.getAll();
+ if (allSubcommands.isEmpty()) {
+ rstr.add("No commands found.");
+ }
+ for (Map.Entry e : allSubcommands.entrySet()) {
+ rstr.add("""
+ %s - %s
+ Usage: /eye %s %s
+ """.formatted(e.getKey(), e.getValue().description(), e.getKey(), e.getValue()));
+ }
+
+ glim.sendMessage(commandSender, String.join("\n", rstr));
+ return true;
+ }
+
+ @Override
+ public List onTabComplete(CommandSender sender, String[] strings) {
+ return List.of();
+ }
+
+ @Override
+ public String description() {
+ return "Lists all commands.";
+ }
+
+ @Override
+ public String usage() {
+ return "";
+ }
+}
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/ListPolicies.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/ListPolicies.java
index cb866a1..bc1a028 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/ListPolicies.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/ListPolicies.java
@@ -8,12 +8,6 @@ import java.util.ArrayList;
import java.util.List;
public class ListPolicies implements Subcommand {
-
- @Override
- public String name() {
- return "listpolicies";
- }
-
@Override
public boolean execute(CommandSender commandSender, String[] args) {
List rstr = new ArrayList<>();
@@ -28,4 +22,14 @@ public class ListPolicies implements Subcommand {
public List onTabComplete(CommandSender sender, String[] args) {
return List.of();
}
+
+ @Override
+ public String description() {
+ return "Lists all loaded policies.";
+ }
+
+ @Override
+ public String usage() {
+ return "";
+ }
}
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java
index 20576cf..e2632b5 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java
@@ -1,24 +1,23 @@
package io.github.adrianvic.nemesiseye.commands.sub;
import io.github.adrianvic.nemesiseye.Config;
+import io.github.adrianvic.nemesiseye.Nemesis;
import io.github.adrianvic.nemesiseye.policy.Policy;
+import io.github.adrianvic.nemesiseye.reflection.Glimmer;
import org.bukkit.command.CommandSender;
import java.util.ArrayList;
import java.util.List;
public class PolicyInfo implements Subcommand {
- @Override
- public String name() {
- return "policyinfo";
- }
+ private final Glimmer glim = Nemesis.getInstance().getGlimmer();
@Override
public boolean execute(CommandSender commandSender, String[] strings) {
List policies = Config.getInstance().getPolicies();
for (Policy policy : policies) {
if (policy.name().equals(strings[0])) {
- commandSender.sendMessage(String.format("""
+ glim.sendMessage(commandSender, String.format("""
Showing info for policy "%s":
Type: %s
Nodes: %s
@@ -37,4 +36,14 @@ public class PolicyInfo implements Subcommand {
}
return rstr;
}
+
+ @Override
+ public String description() {
+ return "Shows info for a specified policy.";
+ }
+
+ @Override
+ public String usage() {
+ return "";
+ }
}
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Reload.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Reload.java
index 23f1659..48800b6 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Reload.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Reload.java
@@ -6,7 +6,6 @@ import org.bukkit.command.CommandSender;
import java.util.List;
public class Reload implements Subcommand {
-
@Override
public boolean execute(CommandSender commandSender, String [] strings) {
Config.getInstance().load();
@@ -20,7 +19,12 @@ public class Reload implements Subcommand {
}
@Override
- public String name() {
- return "reload";
+ public String description() {
+ return "Reloads the plugin configuration file.";
+ }
+
+ @Override
+ public String usage() {
+ return "";
}
}
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Subcommand.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Subcommand.java
index 1ea9426..cc25614 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Subcommand.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Subcommand.java
@@ -5,7 +5,8 @@ import org.bukkit.command.CommandSender;
import java.util.List;
public interface Subcommand {
- String name();
+ String description();
+ String usage();
@SuppressWarnings("SameReturnValue")
boolean execute(CommandSender commandSender, String[] strings);
List onTabComplete(CommandSender sender, String[] strings);
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java b/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java
index 2509e39..69f5fff 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java
@@ -3,6 +3,7 @@ package io.github.adrianvic.nemesiseye.reflection;
import io.github.adrianvic.nemesiseye.policy.Policy;
import org.bukkit.Location;
import org.bukkit.World;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
@@ -12,15 +13,23 @@ import java.util.List;
import java.util.Map;
public interface Glimmer {
+ void onLoad();
+
+ List getWorlds();
+
+ // Configuration
File loadConfigFile();
List loadPoliciesFromFile(File file);
List getApplyingPoliciesForEntity(HumanEntity entity, List policies);
- void onLoad();
- ItemStack getItemInMainHandHumanEntity(HumanEntity entity);
+
+ // Items
boolean hasItemMeta(ItemStack item);
- List getWorlds();
boolean hasEnchantment(ItemStack item, Map valuesmap);
boolean hasAnyEnchantment(ItemStack itemStack);
+ ItemStack getItemInMainHandHumanEntity(HumanEntity entity);
+
+ // Commands
+ void sendMessage(CommandSender commandSender, String text);
class Box {
public final double x1, y1, z1, x2, y2, z2;
diff --git a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java
index 2d735eb..b406742 100644
--- a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java
+++ b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java
@@ -8,6 +8,7 @@ import io.github.adrianvic.nemesiseye.policy.policies.LocationPolicy;
import io.github.adrianvic.nemesiseye.reflection.Glimmer;
import org.bukkit.Bukkit;
import org.bukkit.World;
+import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.HumanEntity;
@@ -84,6 +85,11 @@ public class r1_21 implements Glimmer {
return entity.getInventory().getItemInMainHand();
}
+ @Override
+ public void sendMessage(CommandSender commandSender, String text) {
+ commandSender.sendMessage(text);
+ }
+
@Override
public boolean hasItemMeta(ItemStack item) {
return item.getItemMeta() != null;
From 81bf64c463ddab65d093d4ca03e6d3e06da58f72 Mon Sep 17 00:00:00 2001
From: adrian
Date: Mon, 15 Dec 2025 14:16:07 -0300
Subject: [PATCH 18/38] Policies now provide their own checks to whether the
player applies or not.
Added GlobalPolicy.
Revamped config YAML structure for more consistency.
Added ChatColor back to commands, should be correctly implemented in the future.
Build environment is now passed to plugin manifest.
Added workflow to automatically build releases.
---
.github/workflows/release-build.yml | 44 +++++++
README.md | 2 +-
build.gradle.kts | 5 +-
.../adrianvic/nemesiseye/impl/b1_7_3.java | 26 +---
src/b1_7_3/resources/settings.yml | 9 ++
.../adrianvic/nemesiseye/DataShifter.java | 42 +++++-
.../adrianvic/nemesiseye/Validator.java | 6 +-
.../nemesiseye/commands/EyeCore.java | 6 +-
.../nemesiseye/commands/sub/PolicyInfo.java | 5 +-
.../adrianvic/nemesiseye/policy/Policy.java | 6 +-
.../nemesiseye/policy/PolicyNode.java | 18 +--
.../nemesiseye/policy/PolicyParser.java | 4 +-
.../nemesiseye/policy/PolicyParsers.java | 4 +-
.../policy/parser/GlobalPolicyParser.java | 32 +++++
.../policy/parser/LocationPolicyParser.java | 46 +------
.../policy/policies/GlobalPolicy.java | 13 ++
.../policy/policies/LocationPolicy.java | 12 +-
.../nemesiseye/reflection/Glimmer.java | 2 -
src/main/resources/settings.yml | 121 ------------------
.../adrianvic/nemesiseye/impl/r1_21.java | 29 +----
src/r1_21/resources/settings.yml | 121 ++++++++++++++++++
21 files changed, 312 insertions(+), 241 deletions(-)
create mode 100644 .github/workflows/release-build.yml
create mode 100644 src/b1_7_3/resources/settings.yml
create mode 100644 src/main/java/io/github/adrianvic/nemesiseye/policy/parser/GlobalPolicyParser.java
create mode 100644 src/main/java/io/github/adrianvic/nemesiseye/policy/policies/GlobalPolicy.java
delete mode 100644 src/main/resources/settings.yml
create mode 100644 src/r1_21/resources/settings.yml
diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml
new file mode 100644
index 0000000..3ed2ff0
--- /dev/null
+++ b/.github/workflows/release-build.yml
@@ -0,0 +1,44 @@
+name: Release Build
+
+on:
+ release:
+ types: [created]
+
+jobs:
+ build-and-release:
+ runs-on: ubuntu-latest
+ 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 }}
+ body: |
+ Automated build for release **${{ github.ref_name }}**.
+ Includes the following artifacts:
+ - `$(ls build/libs/*.jar | tr '\n' '\n' | sed 's/^/ - /')`
diff --git a/README.md b/README.md
index edc86f3..e771bc2 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
[](https://mgr.rf.gd/w/Eye_of_Nemesis)
> [!IMPORTANT]
-> This project is in a early stage, please report any bug you find.
+> This project is in an early stage, please report any bug you find.
# Eye of Nemesis
Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes.
diff --git a/build.gradle.kts b/build.gradle.kts
index 694a1db..4aabc3c 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -4,7 +4,7 @@ plugins {
}
group = "io.github.adrianvic"
-version = System.getenv("NEMESIS_VERSION_NAME") ?: "1.0.3-SNAPSHOT"
+version = System.getenv("NEMESIS_VERSION_NAME") ?: "unknown"
repositories {
mavenCentral()
@@ -77,7 +77,8 @@ mcVersions.forEach { ver ->
manifest {
attributes(
- "Nemesis-Impl-Version" to ver
+ "Nemesis-Impl-Version" to ver,
+ "Nemesis-Environment" to (System.getenv("NEMESIS_BUILD_CHANNEL") ?: "dev")
)
}
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 7ef72cf..19d08fb 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
@@ -4,7 +4,6 @@ import io.github.adrianvic.nemesiseye.Nemesis;
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.policy.policies.LocationPolicy;
import io.github.adrianvic.nemesiseye.reflection.Glimmer;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
@@ -49,30 +48,13 @@ public class b1_7_3 implements Glimmer {
}
List allPolicies = new ArrayList<>();
- for (Map, ?> map : result) {
- for (Map.Entry, ?> entry : map.entrySet()) {
- if (entry.getKey() instanceof String k && entry.getValue() instanceof List> v) {
- List parsed = PolicyParsers.get(k).parse(v);
- allPolicies.addAll(parsed);
- }
+ for (Map, ?> policyMap : result) {
+ if (policyMap.get("type") != null && policyMap.get("type") instanceof String type) {
+ allPolicies.add(PolicyParsers.get(type).parse(policyMap));
}
}
- return allPolicies;
- }
- @Override
- public List getApplyingPoliciesForEntity(HumanEntity entity, List policies) {
- List result = new ArrayList<>();
- for (Policy p : policies) {
- if (p instanceof LocationPolicy lp) {
- for (List boxList : lp.locations()) {
- for (Box b : boxList) {
- if (b.contains(entity.getLocation().toVector())) result.add(p);
- }
- }
- }
- }
- return result;
+ return allPolicies;
}
@Override
diff --git a/src/b1_7_3/resources/settings.yml b/src/b1_7_3/resources/settings.yml
new file mode 100644
index 0000000..09921c7
--- /dev/null
+++ b/src/b1_7_3/resources/settings.yml
@@ -0,0 +1,9 @@
+Policies:
+ # NO SPACES
+ - name: "Block-illegal-items"
+ type: global # global / location / permission / list of types
+ allowList: false # Will deny anything that's not allowed by the nodes if set to true
+ nodes:
+ - useItem:
+ value:
+ - SAND
\ No newline at end of file
diff --git a/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java b/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
index b9edf4a..39331d6 100644
--- a/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
+++ b/src/main/java/io/github/adrianvic/nemesiseye/DataShifter.java
@@ -1,5 +1,8 @@
package io.github.adrianvic.nemesiseye;
+import io.github.adrianvic.nemesiseye.reflection.Glimmer;
+import org.bukkit.Location;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -7,6 +10,7 @@ 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);
@@ -40,14 +44,38 @@ public class DataShifter {
return out;
}
- public static List