Use org.reflections to get all subclass of MineClassImpl in order to avoid the declaration inside the MineClassFactory

This commit is contained in:
Barazok
2020-10-26 01:08:08 +01:00
parent fbbd602333
commit 504db76550
8 changed files with 42 additions and 7 deletions

View File

@@ -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

View File

@@ -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() {

View File

@@ -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<Material> forbiddenItems =

View File

@@ -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<Material> forbiddenItems =

View File

@@ -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<Material> forbiddenItems =

View File

@@ -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<Material> forbiddenItems =

View File

@@ -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<Material> forbiddenItems =

View File

@@ -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<? extends MineClassImpl> 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 */