package org.dynmap.forge_1_12_2; import java.io.File; import java.util.List; import java.util.Map; import org.dynmap.DynmapCommonAPI; import org.dynmap.DynmapCommonAPIListener; import org.dynmap.Log; import org.dynmap.forge_1_12_2.DynmapPlugin.OurLog; import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.ForgeChunkManager.Ticket; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLServerStartedEvent; import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.event.FMLServerStoppingEvent; import net.minecraftforge.fml.common.network.NetworkCheckHandler; import net.minecraftforge.fml.relauncher.Side; @Mod(modid = "dynmap", name = "Dynmap", version = Version.VER) public class DynmapMod { // The instance of your mod that Forge uses. @Instance("dynmap") public static DynmapMod instance; // Says where the client and server 'proxy' code is loaded. @SidedProxy(clientSide = "org.dynmap.forge_1_12_2.ClientProxy", serverSide = "org.dynmap.forge_1_12_2.Proxy") public static Proxy proxy; public static DynmapPlugin plugin; public static File jarfile; public static boolean useforcedchunks; public class APICallback extends DynmapCommonAPIListener { @Override public void apiListenerAdded() { if(plugin == null) { plugin = proxy.startServer(server); } } @Override public void apiEnabled(DynmapCommonAPI api) { } } public class LoadingCallback implements net.minecraftforge.common.ForgeChunkManager.LoadingCallback { @Override public void ticketsLoaded(List tickets, World world) { if(tickets.size() > 0) { DynmapPlugin.setBusy(world, tickets.get(0)); for(int i = 1; i < tickets.size(); i++) { ForgeChunkManager.releaseTicket(tickets.get(i)); } } } } public DynmapMod() { Log.setLogger(new OurLog()); org.dynmap.modsupport.ModSupportImpl.init(); } @EventHandler public void preInit(FMLPreInitializationEvent event) { jarfile = event.getSourceFile(); // Load configuration file - use suggested (config/WesterosBlocks.cfg) Configuration cfg = new Configuration(event.getSuggestedConfigurationFile()); try { cfg.load(); useforcedchunks = cfg.get("Settings", "UseForcedChunks", true).getBoolean(true); } finally { cfg.save(); } } @EventHandler public void init(FMLInitializationEvent event) { /* Set up for chunk loading notice from chunk manager */ if(useforcedchunks) { ForgeChunkManager.setForcedChunkLoadingCallback(DynmapMod.instance, new LoadingCallback()); } else { Log.warning("[Dynmap] World loading using forced chunks is disabled"); } } @EventHandler public void postInit(FMLPostInitializationEvent event) { } private MinecraftServer server; @EventHandler public void serverStarting(FMLServerStartingEvent event) { server = event.getServer(); } @EventHandler public void serverStarted(FMLServerStartedEvent event) { DynmapCommonAPIListener.register(new APICallback()); if(plugin == null) plugin = proxy.startServer(server); plugin.serverStarted(); } @EventHandler public void serverStopping(FMLServerStoppingEvent event) { proxy.stopServer(plugin); plugin = null; } @NetworkCheckHandler public boolean netCheckHandler(Map mods, Side side) { return true; } }