package me.km; import me.kcm.events.Hooks; import me.km.permissions.PermissionManager; import me.km.blockprotections.BlockProtection; import me.km.module.Module; import me.km.module.SimpleConfig; import me.km.databank.DataBank; import me.km.entities.ModEntities; import me.km.networking.ModPacketHandler; import me.km.overrides.ModPlayerList; import me.km.permissions.ModCommandManager; import me.km.playerbank.PlayerManager; import me.km.plots.DummyProtectionBank; import me.km.plots.ProtectionEvents; import me.km.plots.ProtectionBank; import me.km.scheduler.SnuviScheduler; import me.km.snuviscript.ScriptModule; import me.km.utils.ReflectionUtils; import net.minecraft.server.MinecraftServer; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLDedicatedServerSetupEvent; import net.minecraftforge.fml.event.server.FMLServerAboutToStartEvent; import net.minecraftforge.fml.event.server.FMLServerStartingEvent; import net.minecraftforge.fml.event.server.FMLServerStoppingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import org.apache.logging.log4j.LogManager; import net.minecraftforge.fml.common.Mod; import me.km.plots.IProtectionBank; import net.minecraftforge.fml.DeferredWorkQueue; @Mod.EventBusSubscriber @Mod("km") public class KajetansMod { @OnlyIn(Dist.DEDICATED_SERVER) public static SimpleConfig conf; public static Module error; public static DataBank databank; @OnlyIn(Dist.DEDICATED_SERVER) public static SnuviScheduler scheduler; public static PlayerManager playerbank; public static IProtectionBank plots; public static BlockProtection blocks; public static ScriptModule scripts; @OnlyIn(Dist.DEDICATED_SERVER) public static PermissionManager perms; @OnlyIn(Dist.DEDICATED_SERVER) public static ModCommandManager commands; public static CommonProxy proxy = DistExecutor.runForDist(() -> ClientProxy::new, () -> CommonProxy::new); public static final String MODID = "km"; public static final String NAME = "Kajetans Mod"; public static final String VERSION = "0.0.35"; public static KajetansMod instance; public static MinecraftServer server; public static boolean debugMode; public static boolean singlePlayer; static { FluidRegistry.enableUniversalBucket(); } public KajetansMod() { instance = this; FMLJavaModLoadingContext.get().getModEventBus().addListener(this::init); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setupServer); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientInit); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onServerStop); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::postInit); } public void setupServer(FMLDedicatedServerSetupEvent e) { Hooks.setPlayerListFunction(ds -> { ds.setPlayerList(new ModPlayerList(ds)); }); } public void init(FMLCommonSetupEvent e) { DeferredWorkQueue.runLater(() -> ModPacketHandler.init()); //GameRegistry.registerWorldGenerator(new ModWorldGeneration(), 3); DamageUtils.init(); proxy.init(); } public void clientInit(FMLClientSetupEvent e) { ModEntities.initClient(); } public void postInit(FMLLoadCompleteEvent e) { proxy.postInit(); } @SubscribeEvent public static void beforeStart(FMLServerAboutToStartEvent e) { server = e.getServer(); } @SubscribeEvent public static void serverStarting(FMLServerStartingEvent e) { singlePlayer = e.getServer().isSinglePlayer(); if(singlePlayer) { return; } setCommandManager(); // configuration and error-dummy error = new Module("ERROR", TextFormatting.RED); conf = new SimpleConfig(error, "", "config", true); debugMode = conf.getBoolean("debug", false); if(debugMode) { LogManager.getLogger().info("------------------------------------------------"); LogManager.getLogger().info("Starting server in debug mode"); LogManager.getLogger().info("------------------------------------------------"); } else { LogManager.getLogger().info("------------------------------------------------"); LogManager.getLogger().info("Starting server without debug mode"); LogManager.getLogger().info("------------------------------------------------"); } // Datenbankverbindung databank = new DataBank("DataBank", TextFormatting.RED, conf.getString("user", "root"), conf.getString("password", "")); if(!databank.openDataBankConnection()) { LogManager.getLogger().info("------------------------------------------------"); LogManager.getLogger().info("Starting server with dummy databank"); LogManager.getLogger().info("------------------------------------------------"); } // Scheduler scheduler = new SnuviScheduler("Scheduler", TextFormatting.GREEN); scheduler.registerEvents("me.km.scheduler"); databank.startReconnecting(scheduler); // Spielerdatenbank playerbank = new PlayerManager("PlayerBank", TextFormatting.RED, databank); // Plot-System if(databank.isDummyDatabank()) { plots = new DummyProtectionBank(); } else { plots = new ProtectionBank(); } MinecraftForge.EVENT_BUS.register(new ProtectionEvents()); // block protections blocks = new BlockProtection(); // Scriptsystem scripts = new ScriptModule("Scripts", TextFormatting.LIGHT_PURPLE); scripts.registerCommands(e, "me.km.snuviscript"); // Permissions perms = new PermissionManager("Perms", TextFormatting.DARK_PURPLE); scripts.startScript("startscript"); } @OnlyIn(Dist.DEDICATED_SERVER) private static void setCommandManager() { commands = new ModCommandManager(server.isDedicatedServer()); ReflectionUtils.setCommandManager(server, commands); } public void onServerStop(FMLServerStoppingEvent e) { if(singlePlayer) { return; } scripts.startScript("endscript"); scheduler.stop(); databank.closeDataBankConnection(); scheduler.getWorker().stop(); } }