package jk_5.nailed.plugins.directorymappackloader;
import jk_5.eventbus.EventHandler;
import jk_5.nailed.api.event.mappack.RegisterMappacksEvent;
import jk_5.nailed.api.mappack.MappackConfigurationException;
import jk_5.nailed.api.mappack.metadata.MappackMetadata;
import jk_5.nailed.api.mappack.metadata.json.JsonMappackMetadata;
import jk_5.nailed.api.plugin.Plugin;
import jk_5.nailed.server.mappack.metadata.xml.XmlMappackMetadata;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File;
@Plugin(id = "DirectoryMappackLoader", name = "Directory Mappack Loader")
public class DirectoryMappackLoaderPlugin {
private static final Logger logger = LogManager.getLogger();
@EventHandler
public void registerMappacks(RegisterMappacksEvent event){
File mappacksDir = new File(event.getPlatform().getRuntimeDirectory(), "mappacks");
logger.info("Loading directory mappacks");
if(!mappacksDir.exists()) mappacksDir.mkdir();
int i = 0;
for(File file : mappacksDir.listFiles()){
if(file.isDirectory()){
File jsonMappackMetadata = new File(file, "mappack.json");
File xmlMappackMetadata = new File(file, "game.xml");
try{
MappackMetadata metadata = null;
if(xmlMappackMetadata.exists() && xmlMappackMetadata.isFile()){
logger.trace("Attempting to load xml mappack " + file.getName());
metadata = XmlMappackMetadata.fromFile(xmlMappackMetadata);
}else if(jsonMappackMetadata.exists() && jsonMappackMetadata.isFile()){
logger.trace("Attempting to load json mappack " + file.getName());
metadata = JsonMappackMetadata.fromFile(jsonMappackMetadata);
}
if(metadata != null){
DirectoryMappack mappack = new DirectoryMappack(file, metadata);
if(event.registerMappack(mappack)){
i++;
}
}
}catch(MappackConfigurationException e){
logger.warn("Configuration for mappack " + file.getName() + " is invalid: " + e.getMessage());
}
}
}
logger.info("Registered " + i + " DirectoryMappacks");
}
}