diff --git a/build.gradle b/build.gradle deleted file mode 100644 index ca8860c..0000000 --- a/build.gradle +++ /dev/null @@ -1,55 +0,0 @@ -plugins { - id 'java' - id("xyz.jpenilla.run-paper") version "2.3.1" -} - -group = 'io.github.adrianvic' -version = '1.0.2-SNAPSHOT' - -repositories { - mavenCentral() - maven { - name = "papermc-repo" - url = "https://repo.papermc.io/repository/maven-public/" - } -} - -dependencies { - compileOnly("io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT") -} - -tasks { - runServer { - // Configure the Minecraft version for our task. - // This is the only required configuration besides applying the plugin. - // Your plugin's jar (or shadowJar if present) will be used automatically. - minecraftVersion("1.21") - } -} - -def targetJavaVersion = 21 -java { - def javaVersion = JavaVersion.toVersion(targetJavaVersion) - sourceCompatibility = javaVersion - targetCompatibility = javaVersion - if (JavaVersion.current() < javaVersion) { - toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion) - } -} - -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' - - if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) { - options.release.set(targetJavaVersion) - } -} - -processResources { - def props = [version: version] - inputs.properties props - filteringCharset 'UTF-8' - filesMatching('plugin.yml') { - expand props - } -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..c29ae2b --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,93 @@ +plugins { + java + id("xyz.jpenilla.run-paper") version "2.3.1" +} + +group = "io.github.adrianvic" +version = "1.0.2-SNAPSHOT" + +repositories { + mavenCentral() + maven("https://repo.papermc.io/repository/maven-public/") +} + +/* ----------------------------------------- */ +/* SUPPORTED VERSIONS */ +/* ----------------------------------------- */ + +val mcVersions = listOf( + "b1_7_3", + "r1_21" +) + +/* ----------------------------------------- */ +/* CREATE SOURCE SET PER VERSION */ +/* ----------------------------------------- */ + +mcVersions.forEach { ver -> + val ss = sourceSets.create(ver) { + java.srcDir("src/$ver/java") + + resources.setSrcDirs(listOf("src/$ver/resources", "src/main/resources")) + + compileClasspath += sourceSets["main"].output + runtimeClasspath += output + compileClasspath + } + + tasks.withType { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + } + + configurations[ss.implementationConfigurationName] + .extendsFrom(configurations["implementation"]) + + configurations[ss.compileOnlyConfigurationName] + .extendsFrom(configurations["compileOnly"]) + +} + +/* ----------------------------------------- */ +/* DEPENDENCIES */ +/* ----------------------------------------- */ + +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("b1_7_3CompileOnly", files("libs/beta173-api.jar")) +} + +/* ----------------------------------------- */ +/* BUILD TASKS */ +/* ----------------------------------------- */ + +mcVersions.forEach { ver -> + tasks.register("jar${ver.replace(".", "_").replace("-", "_").replace("/", "_").capitalize()}") { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from(sourceSets["main"].output) + from(sourceSets[ver].output) + archiveClassifier.set(ver) + + manifest { + attributes( + "Nemesis-Impl-Version" to ver + ) + } + + } +} + +/* ----------------------------------------- */ +/* JAVA SETTINGS */ +/* ----------------------------------------- */ + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(21)) +} + +tasks.withType { + options.encoding = "UTF-8" +} + +tasks.runServer { + minecraftVersion("1.21") +} \ No newline at end of file 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 new file mode 100644 index 0000000..9d640e7 --- /dev/null +++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java @@ -0,0 +1,6 @@ +package io.github.adrianvic.nemesiseye.impl; + +import io.github.adrianvic.nemesiseye.reflection.Glimmer; + +public class b1_7_3 implements Glimmer { +} diff --git a/src/b1_7_3/resources/plugin.yml b/src/b1_7_3/resources/plugin.yml new file mode 100644 index 0000000..b1b1232 --- /dev/null +++ b/src/b1_7_3/resources/plugin.yml @@ -0,0 +1,5 @@ +name: "Eye-of-Nemesis" +version: '1.0.2-SNAPSHOT' +main: io.github.adrianvic.nemesiseye.Nemesis +author: 'Adrian Victor' +description: "Change what players can do based in custom criteria." \ No newline at end of file diff --git a/src/b1_7_3/resources/version.properties b/src/b1_7_3/resources/version.properties new file mode 100644 index 0000000..5c6ec00 --- /dev/null +++ b/src/b1_7_3/resources/version.properties @@ -0,0 +1 @@ +impl.version=b1_7_3 \ No newline at end of file diff --git a/src/main/java/io/github/adrianvic/nemesiseye/Config.java b/src/main/java/io/github/adrianvic/nemesiseye/Config.java index 56812df..da504ad 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/Config.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/Config.java @@ -1,7 +1,6 @@ package io.github.adrianvic.nemesiseye; import io.github.adrianvic.nemesiseye.policy.Policy; -import io.github.adrianvic.nemesiseye.policy.PolicyParser; import io.github.adrianvic.nemesiseye.policy.PolicyParsers; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java b/src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java index 03e95ef..ed09eb3 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/Nemesis.java @@ -1,23 +1,67 @@ package io.github.adrianvic.nemesiseye; import io.github.adrianvic.nemesiseye.commands.Eye; +import io.github.adrianvic.nemesiseye.reflection.Glimmer; import org.bukkit.plugin.java.JavaPlugin; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + public final class Nemesis extends JavaPlugin { + private Glimmer glim; + private static final String VERSION_PROP = "impl.version"; + private static Nemesis instance; @Override public void onEnable() { + instance = this; + glim = loadGlim(); getServer().getPluginManager().registerEvents(new EventListener(), this); Config.getInstance().load(); getCommand("eye").setExecutor(new Eye()); } + private String readImplVersion() { + Properties props = new Properties(); + try (InputStream is = getClass().getClassLoader() + .getResourceAsStream("version.properties")) { + if (is == null) { + throw new IllegalStateException("version.properties not found on classpath."); + } + props.load(is); + } catch (IOException e) { + throw new IllegalStateException("Failed to load version.properties", e); + } + String version = props.getProperty(VERSION_PROP); + if (version == null || version.isBlank()) { + throw new IllegalStateException(VERSION_PROP + " property missing in version.properties."); + } + return version.trim(); + } + + private Glimmer loadGlim() { + String implVersion = readImplVersion(); + String className = "io.github.adrianvic.nemesiseye.impl." + implVersion; + + try { + Class clazz = Class.forName(className, true, getClass().getClassLoader()); + if (!Glimmer.class.isAssignableFrom(clazz)) { + throw new IllegalStateException(className + " does not implement Glimmer."); + } + return (Glimmer) clazz.getDeclaredConstructor().newInstance(); + } catch (ReflectiveOperationException e) { + throw new IllegalStateException("Failed to instantiate " + className, e); + } + } + @Override public void onDisable() { - // Plugin shutdown logic } public static Nemesis getInstance() { - return getPlugin(Nemesis.class); + return instance; } + + public Glimmer getGlimmer() { return glim; } } \ No newline at end of file diff --git a/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java b/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java new file mode 100644 index 0000000..df105cc --- /dev/null +++ b/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java @@ -0,0 +1,5 @@ +package io.github.adrianvic.nemesiseye.reflection; + +public interface Glimmer { + +} 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 new file mode 100644 index 0000000..8bd126f --- /dev/null +++ b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java @@ -0,0 +1,4 @@ +package io.github.adrianvic.nemesiseye.impl; + +public class r1_21 { +} diff --git a/src/main/resources/plugin.yml b/src/r1_21/resources/plugin.yml similarity index 100% rename from src/main/resources/plugin.yml rename to src/r1_21/resources/plugin.yml diff --git a/src/r1_21/resources/version.properties b/src/r1_21/resources/version.properties new file mode 100644 index 0000000..89241bf --- /dev/null +++ b/src/r1_21/resources/version.properties @@ -0,0 +1 @@ +impl.version=r1_21 \ No newline at end of file