added reflection for appliance loading, extended logging and error handling
This commit is contained in:
parent
d66996bc73
commit
e5ff3d36fa
@ -26,6 +26,7 @@ dependencies {
|
|||||||
compileOnly 'org.geysermc.floodgate:api:2.2.2-SNAPSHOT'
|
compileOnly 'org.geysermc.floodgate:api:2.2.2-SNAPSHOT'
|
||||||
implementation 'org.apache.httpcomponents:httpclient:4.5.14'
|
implementation 'org.apache.httpcomponents:httpclient:4.5.14'
|
||||||
implementation 'com.sparkjava:spark-core:2.9.4'
|
implementation 'com.sparkjava:spark-core:2.9.4'
|
||||||
|
implementation 'org.reflections:reflections:0.10.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
def targetJavaVersion = 21
|
def targetJavaVersion = 21
|
||||||
|
@ -2,47 +2,17 @@ package eu.mhsl.craftattack.spawn;
|
|||||||
|
|
||||||
import eu.mhsl.craftattack.spawn.api.HttpServer;
|
import eu.mhsl.craftattack.spawn.api.HttpServer;
|
||||||
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
||||||
import eu.mhsl.craftattack.spawn.appliances.antiSignEdit.AntiSignEdit;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.autoShulker.AutoShulker;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.chatMention.ChatMention;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.doubeDoor.DoubleDoor;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.event.Event;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.fleischerchest.Fleischerchest;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.glowingBerries.GlowingBerries;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.help.Help;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.hotbarRefill.HotbarRefill;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.kick.Kick;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.knockDoor.KnockDoor;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.maintenance.Maintenance;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.optionLinks.OptionLinks;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.packSelect.PackSelect;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.portableCrafting.PortableCrafting;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.projectStart.ProjectStart;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.report.Report;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.restart.Restart;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.tablist.Tablist;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.titleClear.TitleClear;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.whitelist.Whitelist;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.worldmuseum.WorldMuseum;
|
|
||||||
import eu.mhsl.craftattack.spawn.appliances.yearRank.YearRank;
|
|
||||||
import eu.mhsl.craftattack.spawn.config.Configuration;
|
import eu.mhsl.craftattack.spawn.config.Configuration;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
import java.lang.reflect.ParameterizedType;
|
import java.lang.reflect.ParameterizedType;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
public final class Main extends JavaPlugin {
|
public final class Main extends JavaPlugin {
|
||||||
private static Main instance;
|
private static Main instance;
|
||||||
@ -56,59 +26,46 @@ public final class Main extends JavaPlugin {
|
|||||||
instance = this;
|
instance = this;
|
||||||
logger = instance().getLogger();
|
logger = instance().getLogger();
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
Configuration.readConfig();
|
try {
|
||||||
|
this.wrappedEnable();
|
||||||
|
} catch (Exception e) {
|
||||||
|
Main.logger().log(Level.SEVERE, "Error while initializing Spawn plugin, shutting down!", e);
|
||||||
|
Bukkit.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void wrappedEnable() {
|
||||||
|
Configuration.readConfig();
|
||||||
List<String> disabledAppliances = Configuration.pluginConfig.getStringList("disabledAppliances");
|
List<String> disabledAppliances = Configuration.pluginConfig.getStringList("disabledAppliances");
|
||||||
this.appliances = Stream.of(
|
|
||||||
new AdminMarker(),
|
|
||||||
new WorldMuseum(),
|
|
||||||
new TitleClear(),
|
|
||||||
new ProjectStart(),
|
|
||||||
new Tablist(),
|
|
||||||
new ChatMessages(),
|
|
||||||
new Report(),
|
|
||||||
new Event(),
|
|
||||||
new Help(),
|
|
||||||
new PlayerLimit(),
|
|
||||||
new Whitelist(),
|
|
||||||
new Restart(),
|
|
||||||
new Kick(),
|
|
||||||
new PanicBan(),
|
|
||||||
new Outlawed(),
|
|
||||||
new DisplayName(),
|
|
||||||
new Debug(),
|
|
||||||
new Fleischerchest(),
|
|
||||||
new CustomAdvancements(),
|
|
||||||
new Settings(),
|
|
||||||
new PortableCrafting(),
|
|
||||||
new AutoShulker(),
|
|
||||||
new AntiSignEdit(),
|
|
||||||
new HotbarRefill(),
|
|
||||||
new ChatMention(),
|
|
||||||
new DoubleDoor(),
|
|
||||||
new KnockDoor(),
|
|
||||||
new PackSelect(),
|
|
||||||
new GlowingBerries(),
|
|
||||||
new Maintenance(),
|
|
||||||
new OptionLinks(),
|
|
||||||
new YearRank()
|
|
||||||
)
|
|
||||||
.filter(appliance -> disabledAppliances.stream()
|
|
||||||
.noneMatch(s -> s.equalsIgnoreCase(appliance.getClass().getSimpleName())))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
Main.logger.info("Loading appliances...");
|
Main.logger.info("Loading appliances...");
|
||||||
appliances.forEach(appliance -> {
|
Reflections reflections = new Reflections(this.getClass().getPackageName());
|
||||||
Main.logger().info("Enabling " + appliance.getClass().getSimpleName());
|
Set<Class<? extends Appliance>> applianceClasses = reflections.getSubTypesOf(Appliance.class);
|
||||||
|
|
||||||
|
this.appliances = applianceClasses.stream()
|
||||||
|
.filter(applianceClass -> !disabledAppliances.contains(applianceClass.getSimpleName()))
|
||||||
|
.map(applianceClass -> {
|
||||||
|
try {
|
||||||
|
return (Appliance) applianceClass.getDeclaredConstructor().newInstance();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(String.format("Failed to create instance of '%s'", applianceClass.getName()), e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.toList();
|
||||||
|
Main.logger().info(String.format("Loaded %d appliances!", appliances.size()));
|
||||||
|
|
||||||
|
Main.logger().info("Initializing appliances...");
|
||||||
|
this.appliances.forEach(appliance -> {
|
||||||
appliance.onEnable();
|
appliance.onEnable();
|
||||||
appliance.initialize(this);
|
appliance.initialize(this);
|
||||||
});
|
});
|
||||||
Main.logger().info("Loaded " + appliances.size() + " appliances!");
|
Main.logger().info(String.format("Initialized %d appliances!", appliances.size()));
|
||||||
|
|
||||||
Main.logger().info("Starting HTTP API");
|
Main.logger().info("Starting HTTP API...");
|
||||||
this.httpApi = new HttpServer();
|
this.httpApi = new HttpServer();
|
||||||
|
|
||||||
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
||||||
|
Main.logger().info("Startup complete!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user