116 lines
4.3 KiB
Java
116 lines
4.3 KiB
Java
package eu.mhsl.craftattack.spawn;
|
|
|
|
import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
|
|
import eu.mhsl.craftattack.spawn.api.HttpServer;
|
|
import eu.mhsl.craftattack.spawn.appliance.Appliance;
|
|
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
|
|
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
|
|
import eu.mhsl.craftattack.spawn.appliances.fleischerchest.Fleischerchest;
|
|
import eu.mhsl.craftattack.spawn.appliances.kick.Kick;
|
|
import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages;
|
|
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
|
|
import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan;
|
|
import eu.mhsl.craftattack.spawn.appliances.projectStart.ProjectStart;
|
|
import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
|
|
import eu.mhsl.craftattack.spawn.appliances.event.Event;
|
|
import eu.mhsl.craftattack.spawn.appliances.help.Help;
|
|
import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit;
|
|
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.config.Configuration;
|
|
import eu.mhsl.craftattack.spawn.appliances.worldmuseum.WorldMuseum;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.event.HandlerList;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
|
|
import java.lang.reflect.ParameterizedType;
|
|
import java.util.List;
|
|
|
|
public final class Main extends JavaPlugin {
|
|
private static Main instance;
|
|
|
|
private List<Appliance> appliances;
|
|
private HttpServer httpApi;
|
|
@Override
|
|
public void onEnable() {
|
|
instance = this;
|
|
saveDefaultConfig();
|
|
Configuration.readConfig();
|
|
|
|
appliances = List.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()
|
|
);
|
|
|
|
Bukkit.getLogger().info("Loading appliances...");
|
|
appliances.forEach(appliance -> {
|
|
Bukkit.getLogger().info("Enabling " + appliance.getClass().getSimpleName());
|
|
appliance.onEnable();
|
|
appliance.initialize(this);
|
|
});
|
|
Bukkit.getLogger().info("Loaded " + appliances.size() + " appliances!");
|
|
|
|
Bukkit.getLogger().info("Starting HTTP API");
|
|
this.httpApi = new HttpServer();
|
|
|
|
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
|
}
|
|
|
|
@Override
|
|
public void onDisable() {
|
|
Bukkit.getLogger().info("Disabling appliances...");
|
|
appliances.forEach(appliance -> {
|
|
Bukkit.getLogger().info("Disabling " + appliance.getClass().getSimpleName());
|
|
appliance.onDisable();
|
|
appliance.destruct(this);
|
|
});
|
|
this.httpApi.stop();
|
|
HandlerList.unregisterAll(this);
|
|
Bukkit.getScheduler().cancelTasks(this);
|
|
Bukkit.getLogger().info("Disabled " + appliances.size() + " appliances!");
|
|
}
|
|
|
|
public <T extends Appliance> T getAppliance(Class<T> clazz) {
|
|
return this.appliances.stream()
|
|
.filter(clazz::isInstance)
|
|
.map(clazz::cast)
|
|
.findFirst()
|
|
.orElseThrow(() -> new RuntimeException(String.format("Appliance %s not loaded or instantiated!", clazz)));
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
public static <T> Class<T> getApplianceType(Class<?> clazz) {
|
|
return (Class<T>) ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()[0];
|
|
}
|
|
|
|
public List<Appliance> getAppliances() {
|
|
return appliances;
|
|
}
|
|
|
|
public static Main instance() {
|
|
return instance;
|
|
}
|
|
}
|