diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml
index c3c036b..149d2f5 100644
--- a/.forgejo/workflows/build.yml
+++ b/.forgejo/workflows/build.yml
@@ -11,7 +11,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/.forgejo/workflows/release-build.yml b/.forgejo/workflows/release-build.yml
index dcc83d3..392e32e 100644
--- a/.forgejo/workflows/release-build.yml
+++ b/.forgejo/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"
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/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/v1_7_3/ConfigurationEx.java
new file mode 100644
index 0000000..6fc8e27
--- /dev/null
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/ConfigurationEx.java
@@ -0,0 +1,89 @@
+package io.github.adrianvic.nemesiseye.impl.v1_7_3;
+
+import io.github.adrianvic.nemesiseye.Nemesis;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.bukkit.util.config.Configuration;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+
+public class ConfigurationEx extends Configuration {
+ private final File configFile;
+ private final Log logger;
+ JavaPlugin plugin;
+
+ public ConfigurationEx(String fileName, Log _logger) {
+ super(new File(Nemesis.getInstance().getDataFolder(), fileName));
+ this.plugin = Nemesis.getInstance();
+ logger = _logger;
+ this.configFile = new File(plugin.getDataFolder(), fileName);
+ }
+
+ @Override
+ public void load() {
+ createParentDirectories();
+
+ if (!configFile.exists()) {
+ copyDefaultConfig();
+ }
+
+ try {
+ super.load();
+ } catch (Exception e) {
+ logger.severe(String.format("Failed to load config '%s': %s", configFile.getName(), e.getMessage()));
+ }
+ }
+
+ private void createParentDirectories() {
+ try {
+ Files.createDirectories(configFile.getParentFile().toPath());
+ } catch (IOException e) {
+ logger.severe(String.format("Failed to generate default config directory: %s", e.getMessage()));
+ }
+ }
+
+ private void copyDefaultConfig() {
+ // Load the config from the JAR directly (it is located at the root level)
+ String resourcePath = "/" + configFile.getName(); // Root path of JAR
+
+ try (InputStream input = plugin.getClass().getResourceAsStream(resourcePath)) {
+ if (input == null) {
+ logger.severe(String.format("Default config '%s' wasn't found in the JAR.", configFile.getName()));
+ return;
+ }
+
+ Files.copy(input, configFile.toPath());
+ if (Files.exists(configFile.toPath())) {
+ logger.info(String.format("Default config '%s' generated successfully.", configFile.getName()));
+ } else {
+ logger.warning("We tried to generate the default config file, but it was not found even after the creation. Maybe your permissions are broken?");
+ }
+ } catch (IOException e) {
+ logger.severe(String.format("Failed to generate default config '%s': %s", configFile.getName(), e.getMessage()));
+ }
+ }
+
+ public void loadConfig() {
+ try {
+ this.load();
+ logger.info(String.format("Config '%s' loaded successfully.", configFile.getName()));
+ } catch (Exception e) {
+ logger.severe(String.format("Failed to load config '%s': %s", configFile.getName(), e.getMessage()));
+ }
+ }
+
+ public void saveConfig() {
+ try {
+ this.save();
+ logger.info(String.format("Config '%s' saved successfully.", configFile.getName()));
+ } catch (Exception e) {
+ logger.severe(String.format("Failed to save config '%s': %s", configFile.getName(), e.getMessage()));
+ }
+ }
+
+ public File getConfig() {
+ return configFile;
+ }
+}
\ No newline at end of file
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/v1_7_3/Log.java
new file mode 100644
index 0000000..e06b33c
--- /dev/null
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/Log.java
@@ -0,0 +1,41 @@
+package io.github.adrianvic.nemesiseye.impl.v1_7_3;
+
+import static org.bukkit.Bukkit.getServer;
+
+import io.github.adrianvic.nemesiseye.Nemesis;
+import org.bukkit.plugin.PluginDescriptionFile;
+import org.bukkit.plugin.java.JavaPlugin;
+
+public class Log {
+ JavaPlugin plugin;
+ PluginDescriptionFile pdf;
+
+ public Log() {
+ plugin = Nemesis.getInstance();
+ pdf = plugin.getDescription();
+ }
+
+ public void info(String message) {
+ getServer().getLogger().info("[" + pdf.getName() + "] " + message);
+ }
+
+ public void infoc(String message) {
+ getServer().getLogger().info("[" + pdf.getName() + "] " + message);
+ }
+
+ public void warning(String message) {
+ getServer().getLogger().warning("[" + pdf.getName() + "] " + message);
+ }
+
+ public void warningc(String message) {
+ getServer().getLogger().warning("[" + pdf.getName() + "] " + message);
+ }
+
+ public void severe(String message) {
+ getServer().getLogger().severe("[" + pdf.getName() + "] " + message);
+ }
+
+ public void severec(String message) {
+ getServer().getLogger().severe("[" + pdf.getName() + "] " + message);
+ }
+}
\ No newline at end of file
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/v1_7_3/b1_7_3.java
new file mode 100644
index 0000000..0129a81
--- /dev/null
+++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/v1_7_3/b1_7_3.java
@@ -0,0 +1,152 @@
+package io.github.adrianvic.nemesiseye.impl.v1_7_3;
+
+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.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;
+import org.bukkit.event.Event;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.plugin.PluginManager;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.io.File;
+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;
+ ConfigurationEx config;
+
+ @Override
+ public File loadConfigFile() {
+ config = new ConfigurationEx("settings.yml", new Log());
+ config.load();
+ return config.getConfig();
+ }
+
+ @Override
+ public List loadPoliciesFromFile(File file) {
+ List> rawPolicies = config.getList("Policies");
+
+ if (rawPolicies == null) {
+ return new ArrayList<>();
+ }
+
+ List