package jas.common; import java.util.ArrayList; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import net.minecraft.world.ChunkPosition; public class JASLog { private static Logger myLog; private static JASLog jasLog; private static boolean isSetup; public static JASLog log() { return jasLog; } private class LogType { private final boolean isEnabled; public LogType() { this.isEnabled = false; } private LogType(boolean isEnabled) { this.isEnabled = isEnabled; } public boolean isEnabled() { return isEnabled; } } public final String FILE_VERSION = "1.0"; private final LogType SPAWNING; private final LogType DEBUG; private final LogType SETUP_SPAWNLISTENTRY; private final LogType SPAWNING_NAME; private final LogType SPAWNING_TYPE; private final LogType SPAWNING_POS; private final LogType SPAWNING_BIOME; private final LogType SPAWNING_NEARBY_BLOCKS; public JASLog() { SPAWNING = new LogType(true); DEBUG = new LogType(); SPAWNING_NAME = new LogType(true); SPAWNING_TYPE = new LogType(true); SPAWNING_POS = new LogType(true); SPAWNING_BIOME = new LogType(true); SETUP_SPAWNLISTENTRY = new LogType(true); SPAWNING_NEARBY_BLOCKS = new LogType(false); } public static void setLogger(JASLog log) { if (!isSetup) { JASLog.isSetup = true; JASLog.jasLog = log; JASLog.myLog = LogManager.getLogger("JustAnotherSpawner"); } } public void log(Level level, String format, Object... data) { myLog.log(level, String.format(format, data)); } public void info(String format, Object... data) { log(Level.INFO, format, data); } public void warning(String format, Object... data) { log(Level.WARN, format, data); } public void severe(String format, Object... data) { log(Level.ERROR, format, data); } public void debug(Level level, String format, Object... data) { if (DEBUG.isEnabled()) { log(level, format, data); } } public void log(LogType type, Level level, String format, Object... data) { if (type.isEnabled()) { log(level, format, data); } } public void logSpawnListEntry(String livingGroupID, String LocationID, boolean success, String detail) { if (SETUP_SPAWNLISTENTRY.isEnabled) { if (success) { JASLog.log().info("Adding SpawnListEntry %s to BiomeGroup %s %s", livingGroupID, detail, LocationID); } else { JASLog.log().debug(Level.INFO, "Not adding generated SpawnListEntry of %s to %s %s", livingGroupID, LocationID, detail); } } } public void logSpawn(boolean chunkSpawn, String entityName, String creatureType, int xCoord, int yCoord, int zCoord, String biomeName) { if (SPAWNING.isEnabled()) { StringBuilder sb = new StringBuilder(90); sb.append(chunkSpawn ? "Chunk spawning entity" : "Passive Spawning entity"); if (SPAWNING_NAME.isEnabled()) { sb.append(" ").append(entityName); } if (SPAWNING_TYPE.isEnabled()) { sb.append(" of type ").append(creatureType); } if (SPAWNING_POS.isEnabled()) { sb.append(" at ").append(xCoord).append(", ").append(yCoord).append(", ").append(zCoord); } if (SPAWNING_BIOME.isEnabled()) { sb.append(" (").append(biomeName).append(")"); } log(SPAWNING, Level.INFO, sb.toString()); } } // Accessor created due to performance cost of checking nearby blocks if logging is not required public boolean isLogNearbyBlocksEnabled(){ return SPAWNING_NEARBY_BLOCKS.isEnabled; } public void logSpawn(boolean chunkSpawn, String entityName, String creatureType, int xCoord, int yCoord, int zCoord, String biomeName, ArrayList<Integer> nearbyX, ArrayList<Integer> nearbyY, ArrayList<Integer> nearbyZ, ArrayList<String> nearbyBlocks) { if (SPAWNING.isEnabled()) { StringBuilder sb = new StringBuilder(90); sb.append(chunkSpawn ? "Chunk spawning entity" : "Passive Spawning entity"); if (SPAWNING_NAME.isEnabled()) { sb.append(" ").append(entityName); } if (SPAWNING_TYPE.isEnabled()) { sb.append(" of type ").append(creatureType); } if (SPAWNING_POS.isEnabled()) { sb.append(" at ").append(xCoord).append(", ").append(yCoord).append(", ").append(zCoord); } if (SPAWNING_BIOME.isEnabled()) { sb.append(" (").append(biomeName).append(")"); } if(SPAWNING_NEARBY_BLOCKS.isEnabled) { if(nearbyX.size() != nearbyY.size() || nearbyY.size() != nearbyZ.size() || nearbyZ.size() != nearbyBlocks.size()) { jasLog.severe("Error writing nearbyBlocks to log, unequal data [%s, %s, %s, %s]", nearbyX.size(), nearbyY.size(), nearbyZ.size(), nearbyBlocks.size()); } else { sb.append(": Nearby blocks were"); for (int i = 0; i < nearbyBlocks.size(); i++) { if (i!=0) { sb.append(","); } sb.append(" ["); sb.append(nearbyX.get(i)).append(", "); sb.append(nearbyY.get(i)).append(", "); sb.append(nearbyZ.get(i)).append(", "); sb.append(nearbyBlocks.get(i)).append("]"); } } } log(SPAWNING, Level.INFO, sb.toString()); } } }