From 504db76550dfb6616e32ad614c9b84faaacd0af5 Mon Sep 17 00:00:00 2001 From: Barazok Date: Mon, 26 Oct 2020 01:08:08 +0100 Subject: [PATCH] Use org.reflections to get all subclass of MineClassImpl in order to avoid the declaration inside the MineClassFactory --- build.gradle | 24 +++++++++++++++++++ .../java/net/babamod/mineclass/Mineclass.java | 3 +-- .../mineclass/classes/BeastMasterClass.java | 1 + .../babamod/mineclass/classes/DwarfClass.java | 1 + .../babamod/mineclass/classes/ElfClass.java | 1 + .../mineclass/classes/EnderElfClass.java | 1 + .../mineclass/classes/FireDwarfClass.java | 1 + .../mineclass/classes/MineClassFactory.java | 17 +++++++++---- 8 files changed, 42 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 7a094c4..d4f4f85 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,16 @@ import org.apache.tools.ant.filters.ReplaceTokens +import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.github.jengelman.gradle.plugins:shadow:5.1.0' + } +} + +apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'java' group = 'net.babamod' @@ -22,6 +33,7 @@ repositories { dependencies { compileOnly 'org.spigotmc:spigot-api:1.16.3-R0.1-SNAPSHOT' + compile group: 'org.reflections', name: 'reflections', version: '0.9.10' } processResources { @@ -29,3 +41,15 @@ processResources { filter ReplaceTokens, tokens: [version: version] } } + +shadowJar { + archiveBaseName.set('mineclass') + archiveClassifier.set('') + archiveVersion.set('') +} + +task relocateShadowJar(type: ConfigureShadowRelocation) { + target = tasks.shadowJar +} + +tasks.shadowJar.dependsOn tasks.relocateShadowJar \ No newline at end of file diff --git a/src/main/java/net/babamod/mineclass/Mineclass.java b/src/main/java/net/babamod/mineclass/Mineclass.java index 4526950..3f143e0 100644 --- a/src/main/java/net/babamod/mineclass/Mineclass.java +++ b/src/main/java/net/babamod/mineclass/Mineclass.java @@ -5,13 +5,12 @@ import net.babamod.mineclass.commands.CommandClass; import net.babamod.mineclass.listeners.MineClassListeners; import org.bukkit.Bukkit; import org.bukkit.command.PluginCommand; -import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; import java.util.ArrayList; import java.util.List; -public final class Mineclass extends JavaPlugin implements Listener { +public final class Mineclass extends JavaPlugin { @Override public void onEnable() { diff --git a/src/main/java/net/babamod/mineclass/classes/BeastMasterClass.java b/src/main/java/net/babamod/mineclass/classes/BeastMasterClass.java index d80cc78..6a27827 100644 --- a/src/main/java/net/babamod/mineclass/classes/BeastMasterClass.java +++ b/src/main/java/net/babamod/mineclass/classes/BeastMasterClass.java @@ -11,6 +11,7 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +@SuppressWarnings("unused") public class BeastMasterClass extends MineClassImpl { private static final Set forbiddenItems = diff --git a/src/main/java/net/babamod/mineclass/classes/DwarfClass.java b/src/main/java/net/babamod/mineclass/classes/DwarfClass.java index aab3e05..5ca0d09 100644 --- a/src/main/java/net/babamod/mineclass/classes/DwarfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/DwarfClass.java @@ -10,6 +10,7 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +@SuppressWarnings("unused") public class DwarfClass extends MineClassImpl { private final Set forbiddenItems = diff --git a/src/main/java/net/babamod/mineclass/classes/ElfClass.java b/src/main/java/net/babamod/mineclass/classes/ElfClass.java index 24ccdda..7d39568 100644 --- a/src/main/java/net/babamod/mineclass/classes/ElfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/ElfClass.java @@ -10,6 +10,7 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +@SuppressWarnings("unused") public class ElfClass extends MineClassImpl { private static final Set forbiddenItems = diff --git a/src/main/java/net/babamod/mineclass/classes/EnderElfClass.java b/src/main/java/net/babamod/mineclass/classes/EnderElfClass.java index 521515c..4f50389 100644 --- a/src/main/java/net/babamod/mineclass/classes/EnderElfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/EnderElfClass.java @@ -13,6 +13,7 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +@SuppressWarnings("unused") public class EnderElfClass extends MineClassImpl { private static final Set forbiddenItems = diff --git a/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java b/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java index 4d61110..493e5f1 100644 --- a/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java @@ -10,6 +10,7 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +@SuppressWarnings("unused") public class FireDwarfClass extends MineClassImpl { private static final Set forbiddenItems = diff --git a/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java b/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java index 5968630..85c0948 100644 --- a/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java +++ b/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java @@ -1,11 +1,14 @@ package net.babamod.mineclass.classes; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; +import org.reflections.Reflections; import java.util.*; +import java.util.logging.Level; public class MineClassFactory { /** Instance unique pré-initialisée */ @@ -16,11 +19,15 @@ public class MineClassFactory { /** Constructeur privé */ private MineClassFactory() { availableClasses = new HashMap<>(); - availableClasses.put("dwarf", new DwarfClass()); - availableClasses.put("elf", new ElfClass()); - availableClasses.put("fire_dwarf", new FireDwarfClass()); - availableClasses.put("ender_elf", new EnderElfClass()); - availableClasses.put("beast_master", new BeastMasterClass()); + // Reflecting all MineClass classes and instantiates them with there codes + for (Class aClass : new Reflections().getSubTypesOf(MineClassImpl.class)) { + try { + MineClass mineClass = aClass.newInstance(); + availableClasses.put(mineClass.getCode(), mineClass); + } catch (InstantiationException | IllegalAccessException e) { + Bukkit.getLogger().log(Level.WARNING, e.getMessage()); + } + } } /** Point d'accès pour l'instance unique du singleton */