Java tutorial
/* * Caveworld * * Copyright (c) 2014 kegare * https://github.com/kegare * * This mod is distributed under the terms of the Minecraft Mod Public License Japanese Translation, or MMPL_J. */ package com.kegare.caveworld.core; import java.io.File; import java.util.List; import java.util.Set; import net.minecraft.entity.EnumCreatureType; import net.minecraft.init.Blocks; import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.common.BiomeDictionary.Type; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.logging.log4j.Level; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.kegare.caveworld.api.BlockEntry; import com.kegare.caveworld.api.CaveworldAPI; import com.kegare.caveworld.api.ICaveBiome; import com.kegare.caveworld.block.CaveBlocks; import com.kegare.caveworld.core.CaveBiomeManager.CaveBiome; import com.kegare.caveworld.core.CaveVeinManager.CaveVein; import com.kegare.caveworld.entity.EntityCaveman; import com.kegare.caveworld.util.CaveConfiguration; import com.kegare.caveworld.util.CaveLog; import com.kegare.caveworld.util.CaveUtils; import com.kegare.caveworld.util.Version; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameData; import cpw.mods.fml.relauncher.Side; public class Config { private static final Side side = FMLCommonHandler.instance().getSide(); public static Configuration generalCfg; public static Configuration blocksCfg; public static Configuration itemsCfg; public static Configuration dimensionCfg; public static Configuration biomesCfg; public static Configuration entitiesCfg; public static Configuration veinsCfg; public static boolean versionNotify; public static boolean veinsAutoRegister; public static boolean deathLoseMiningPoint; public static boolean portalCraftRecipe; public static boolean mossStoneCraftRecipe; public static boolean hardcore; public static boolean caveborn; public static boolean rope; public static boolean oreCavenium; public static boolean cavenium; public static boolean pickaxeMining; public static boolean oreCompass; public static int cavemanSpawnWeight; public static int cavemanSpawnMinHeight; public static int cavemanSpawnMaxHeight; public static int cavemanSpawnInChunks; public static int[] cavemanSpawnBiomes; public static int cavemanCreatureType; public static boolean cavemanShowHealthBar; public static int dimensionCaveworld; public static int dimensionDeepCaveworld; public static int subsurfaceHeight; public static boolean generateCaves; public static boolean generateExtremeCaves; public static boolean generateDeepCaves; public static boolean generateUnderCaves; public static boolean generateRavine; public static boolean generateExtremeRavine; public static boolean generateMineshaft; public static boolean generateStronghold; public static boolean generateLakes; public static boolean generateDungeons; public static boolean generateAnimalDungeons; public static boolean decorateVines; public static final int RENDER_TYPE_PORTAL = Caveworld.proxy.getUniqueRenderType(); public static Class selectBlockEntryClass; public static Class selectItemEntryClass; public static Class selectBiomeEntryClass; public static File getConfigFile(String name) { File dir = new File(Loader.instance().getConfigDir(), "caveworld"); if (!dir.exists()) { dir.mkdirs(); } return new File(dir, "caveworld-" + name + ".cfg"); } public static Configuration loadConfig(String name) { File file = getConfigFile(name); Configuration config = new CaveConfiguration(file, true); try { config.load(); } catch (Exception e) { File dest = new File(file.getParentFile(), file.getName() + ".bak"); if (dest.exists()) { dest.delete(); } file.renameTo(dest); CaveLog.log(Level.ERROR, e, "A critical error occured reading the " + file.getName() + " file, defaults will be used - the invalid file is backed up at " + dest.getName()); } return config; } public static String getConfigName(Configuration config) { String name = FilenameUtils.getBaseName(config.toString()); if (name != null && name.startsWith("caveworld-")) { return name.substring(name.lastIndexOf('-') + 1); } return null; } public static void syncGeneralCfg() { String category = Configuration.CATEGORY_GENERAL; Property prop; List<String> propOrder = Lists.newArrayList(); if (generalCfg == null) { generalCfg = loadConfig(category); } prop = generalCfg.get(category, "versionNotify", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; prop.comment += Configuration.NEW_LINE; prop.comment += "Note: If multiplayer, does not have to match client-side and server-side."; propOrder.add(prop.getName()); versionNotify = prop.getBoolean(versionNotify); prop = generalCfg.get(category, "veinsAutoRegister", false); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; prop.comment += Configuration.NEW_LINE; prop.comment += "Note: If multiplayer, server-side only."; propOrder.add(prop.getName()); veinsAutoRegister = prop.getBoolean(veinsAutoRegister); prop = generalCfg.get(category, "deathLoseMiningPoint", false); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; prop.comment += Configuration.NEW_LINE; prop.comment += "Note: If multiplayer, server-side only."; propOrder.add(prop.getName()); deathLoseMiningPoint = prop.getBoolean(deathLoseMiningPoint); generalCfg.setCategoryPropertyOrder(category, propOrder); category = "recipes"; prop = generalCfg.get(category, "portalCraftRecipe", Version.DEV_DEBUG); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); portalCraftRecipe = prop.getBoolean(portalCraftRecipe); prop = generalCfg.get(category, "mossStoneCraftRecipe", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); mossStoneCraftRecipe = prop.getBoolean(mossStoneCraftRecipe); generalCfg.setCategoryPropertyOrder(category, propOrder); generalCfg.setCategoryRequiresMcRestart(category, true); category = "options"; prop = generalCfg.get(category, "hardcore", false); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; prop.comment += Configuration.NEW_LINE; prop.comment += "Note: If multiplayer, server-side only."; propOrder.add(prop.getName()); hardcore = prop.getBoolean(hardcore); prop = generalCfg.get(category, "caveborn", false); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; prop.comment += Configuration.NEW_LINE; prop.comment += "Note: If multiplayer, server-side only."; propOrder.add(prop.getName()); caveborn = prop.getBoolean(caveborn); generalCfg.setCategoryPropertyOrder(category, propOrder); if (generalCfg.hasChanged()) { generalCfg.save(); } } public static void syncBlocksCfg() { String category = "blocks"; Property prop; List<String> propOrder = Lists.newArrayList(); if (blocksCfg == null) { blocksCfg = loadConfig(category); } blocksCfg.addCustomCategoryComment(category, "If multiplayer, values must match on client-side and server-side."); prop = blocksCfg.get(category, "Rope", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); rope = prop.getBoolean(rope); prop = blocksCfg.get(category, "oreCavenium", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); oreCavenium = prop.getBoolean(oreCavenium); blocksCfg.setCategoryPropertyOrder(category, propOrder); blocksCfg.setCategoryRequiresMcRestart(category, true); if (blocksCfg.hasChanged()) { blocksCfg.save(); } } public static void syncItemsCfg() { String category = "items"; Property prop; List<String> propOrder = Lists.newArrayList(); if (itemsCfg == null) { itemsCfg = loadConfig(category); } itemsCfg.addCustomCategoryComment(category, "If multiplayer, values must match on client-side and server-side."); prop = itemsCfg.get(category, "cavenium", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); cavenium = prop.getBoolean(cavenium); prop = itemsCfg.get(category, "pickaxeMining", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); pickaxeMining = prop.getBoolean(pickaxeMining); prop = itemsCfg.get(category, "oreCompass", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); oreCompass = prop.getBoolean(oreCompass); itemsCfg.setCategoryPropertyOrder(category, propOrder); itemsCfg.setCategoryRequiresMcRestart(category, true); if (itemsCfg.hasChanged()) { itemsCfg.save(); } } public static void syncEntitiesCfg() { String category = "entities"; Property prop; List<String> propOrder = Lists.newArrayList(); if (entitiesCfg == null) { entitiesCfg = loadConfig(category); } category = "Caveman"; prop = entitiesCfg.get(category, "spawnWeight", 2); prop.setMinValue(0).setMaxValue(1000) .setLanguageKey(Caveworld.CONFIG_LANG + "entities.entry." + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [range: " + prop.getMinValue() + " ~ " + prop.getMaxValue() + ", default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); cavemanSpawnWeight = MathHelper.clamp_int(prop.getInt(cavemanSpawnWeight), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); prop = entitiesCfg.get(category, "spawnMinHeight", 10); prop.setMinValue(1).setMaxValue(255) .setLanguageKey(Caveworld.CONFIG_LANG + "entities.entry." + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [range: " + prop.getMinValue() + " ~ " + prop.getMaxValue() + ", default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); cavemanSpawnMinHeight = MathHelper.clamp_int(prop.getInt(cavemanSpawnMinHeight), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); prop = entitiesCfg.get(category, "spawnMaxHeight", 255); prop.setMinValue(1).setMaxValue(255) .setLanguageKey(Caveworld.CONFIG_LANG + "entities.entry." + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [range: " + prop.getMinValue() + " ~ " + prop.getMaxValue() + ", default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); cavemanSpawnMaxHeight = MathHelper.clamp_int(prop.getInt(cavemanSpawnMaxHeight), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); prop = entitiesCfg.get(category, "spawnInChunks", 1); prop.setMinValue(1).setMaxValue(500) .setLanguageKey(Caveworld.CONFIG_LANG + "entities.entry." + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [range: " + prop.getMinValue() + " ~ " + prop.getMaxValue() + ", default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); cavemanSpawnInChunks = MathHelper.clamp_int(prop.getInt(cavemanSpawnInChunks), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); prop = entitiesCfg.get(category, "spawnBiomes", new int[0]); prop.setLanguageKey(Caveworld.CONFIG_LANG + "entities.entry." + prop.getName()) .setConfigEntryClass(selectBiomeEntryClass); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); propOrder.add(prop.getName()); cavemanSpawnBiomes = prop.getIntList(); prop = entitiesCfg.get(category, "creatureType", 0); prop.setMinValue(0).setMaxValue(1) .setLanguageKey(Caveworld.CONFIG_LANG + "entities.entry." + prop.getName()); ; prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); cavemanCreatureType = MathHelper.clamp_int(prop.getInt(cavemanCreatureType), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); if (side.isClient()) { prop = entitiesCfg.get(category, "showHealthBar", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + "entities.entry." + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); cavemanShowHealthBar = prop.getBoolean(); } BiomeGenBase[] def = CaveUtils.getBiomes().toArray(new BiomeGenBase[0]); BiomeGenBase[] biomes = new BiomeGenBase[0]; BiomeGenBase biome; for (int i : cavemanSpawnBiomes) { if (i >= 0 && i < BiomeGenBase.getBiomeGenArray().length) { biome = BiomeGenBase.getBiome(i); if (biome != null) { biomes = ArrayUtils.add(biomes, biome); } } } if (ArrayUtils.isEmpty(biomes)) { biomes = def; } EntityRegistry.removeSpawn(EntityCaveman.class, EnumCreatureType.ambient, def); if (cavemanSpawnWeight > 0) { EntityRegistry.addSpawn(EntityCaveman.class, cavemanSpawnWeight, 1, 1, EnumCreatureType.ambient, biomes); } entitiesCfg.addCustomCategoryComment(category, "If multiplayer, server-side only."); entitiesCfg.setCategoryLanguageKey(category, Caveworld.CONFIG_LANG + category); entitiesCfg.setCategoryPropertyOrder(category, propOrder); if (entitiesCfg.hasChanged()) { entitiesCfg.save(); } } public static void syncDimensionCfg() { String category = "caveworld"; Property prop; List<String> propOrder = Lists.newArrayList(); if (dimensionCfg == null) { dimensionCfg = loadConfig("dimension"); } dimensionCfg.addCustomCategoryComment(category, "If multiplayer, server-side only."); prop = dimensionCfg.get(category, "dimensionCaveworld", -5); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); dimensionCaveworld = prop.getInt(dimensionCaveworld); if (dimensionCaveworld == 0) { prop.set(DimensionManager.getNextFreeDimId()); dimensionCaveworld = prop.getInt(); } prop = dimensionCfg.get(category, "dimensionDeepCaveworld", -6); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()).setRequiresMcRestart(true); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); dimensionDeepCaveworld = prop.getInt(dimensionDeepCaveworld); if (dimensionDeepCaveworld == 0) { prop.set(DimensionManager.getNextFreeDimId()); dimensionDeepCaveworld = prop.getInt(); } prop = dimensionCfg.get(category, "subsurfaceHeight", 255); prop.setMinValue(63).setMaxValue(255) .setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [range: " + prop.getMinValue() + " ~ " + prop.getMaxValue() + ", default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); subsurfaceHeight = MathHelper.clamp_int(prop.getInt(subsurfaceHeight), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); prop = dimensionCfg.get(category, "generateCaves", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateCaves = prop.getBoolean(generateCaves); prop = dimensionCfg.get(category, "generateExtremeCaves", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateExtremeCaves = prop.getBoolean(generateExtremeCaves); prop = dimensionCfg.get(category, "generateDeepCaves", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateDeepCaves = prop.getBoolean(generateDeepCaves); prop = dimensionCfg.get(category, "generateUnderCaves", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateUnderCaves = prop.getBoolean(generateUnderCaves); prop = dimensionCfg.get(category, "generateRavine", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateRavine = prop.getBoolean(generateRavine); prop = dimensionCfg.get(category, "generateExtremeRavine", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateExtremeRavine = prop.getBoolean(generateExtremeRavine); prop = dimensionCfg.get(category, "generateMineshaft", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateMineshaft = prop.getBoolean(generateMineshaft); prop = dimensionCfg.get(category, "generateStronghold", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateStronghold = prop.getBoolean(generateStronghold); prop = dimensionCfg.get(category, "generateLakes", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateLakes = prop.getBoolean(generateLakes); prop = dimensionCfg.get(category, "generateDungeons", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateDungeons = prop.getBoolean(generateDungeons); prop = dimensionCfg.get(category, "generateAnimalDungeons", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); generateAnimalDungeons = prop.getBoolean(generateAnimalDungeons); prop = dimensionCfg.get(category, "decorateVines", true); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); decorateVines = prop.getBoolean(decorateVines); dimensionCfg.setCategoryPropertyOrder(category, propOrder); if (dimensionCfg.hasChanged()) { dimensionCfg.save(); } } public static void syncBiomesCfg() { String category = "biomes"; Property prop; List<String> propOrder = Lists.newArrayList(); if (biomesCfg == null) { biomesCfg = loadConfig(category); } else { CaveworldAPI.clearCaveBiomes(); } String name, terrainBlock, topBlock; int weight, terrainMeta, topMeta; for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) { if (biome == null) { continue; } name = Integer.toString(biome.biomeID); if (CaveBiomeManager.defaultMapping.containsKey(biome)) { ICaveBiome entry = CaveBiomeManager.defaultMapping.get(biome); weight = entry.getGenWeight(); terrainBlock = GameData.getBlockRegistry().getNameForObject(entry.getTerrainBlock().getBlock()); terrainMeta = entry.getTerrainBlock().getMetadata(); topBlock = GameData.getBlockRegistry().getNameForObject(entry.getTopBlock().getBlock()); topMeta = entry.getTopBlock().getMetadata(); } else { weight = 0; terrainBlock = GameData.getBlockRegistry().getNameForObject(Blocks.stone); terrainMeta = 0; topBlock = terrainBlock; topMeta = terrainMeta; } propOrder.clear(); prop = biomesCfg.get(name, "genWeight", weight); prop.setMinValue(0).setMaxValue(100) .setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [range: " + prop.getMinValue() + " ~ " + prop.getMaxValue() + ", default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); weight = MathHelper.clamp_int(prop.getInt(), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); prop = biomesCfg.get(name, "terrainBlock", terrainBlock); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()) .setConfigEntryClass(selectBlockEntryClass); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); terrainBlock = prop.getString(); if (!GameData.getBlockRegistry().containsKey(terrainBlock)) prop.setToDefault(); prop = biomesCfg.get(name, "terrainBlockMetadata", terrainMeta); prop.setMinValue(0).setMaxValue(15) .setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [range: " + prop.getMinValue() + " ~ " + prop.getMaxValue() + ", default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); terrainMeta = MathHelper.clamp_int(prop.getInt(), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); prop = biomesCfg.get(name, "topBlock", topBlock); prop.setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()) .setConfigEntryClass(selectBlockEntryClass); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); topBlock = prop.getString(); if (!GameData.getBlockRegistry().containsKey(topBlock)) prop.setToDefault(); prop = biomesCfg.get(name, "topBlockMetadata", topMeta); prop.setMinValue(0).setMaxValue(15) .setLanguageKey(Caveworld.CONFIG_LANG + category + '.' + prop.getName()); prop.comment = StatCollector.translateToLocal(prop.getLanguageKey() + ".tooltip"); prop.comment += " [range: " + prop.getMinValue() + " ~ " + prop.getMaxValue() + ", default: " + prop.getDefault() + "]"; propOrder.add(prop.getName()); topMeta = MathHelper.clamp_int(prop.getInt(), Integer.parseInt(prop.getMinValue()), Integer.parseInt(prop.getMaxValue())); if (BiomeDictionary.isBiomeRegistered(biome)) { Set<String> types = Sets.newTreeSet(); for (Type type : BiomeDictionary.getTypesForBiome(biome)) { types.add(type.name()); } biomesCfg.addCustomCategoryComment(name, biome.biomeName + ": " + Joiner.on(", ").skipNulls().join(types)); } else { biomesCfg.addCustomCategoryComment(name, biome.biomeName); } biomesCfg.setCategoryPropertyOrder(name, propOrder); if (weight > 0) { CaveworldAPI.addCaveBiome(new CaveBiome(biome, weight, new BlockEntry(terrainBlock, terrainMeta), new BlockEntry(topBlock, topMeta))); } } if (biomesCfg.hasChanged()) { biomesCfg.save(); } } public static void syncVeinsCfg() { if (veinsCfg == null) { veinsCfg = loadConfig("veins"); } else { CaveworldAPI.clearCaveVeins(); } if (veinsCfg.getCategoryNames().isEmpty()) { CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(CaveBlocks.cavenium_ore, 0), 4, 7, 100, 128, 255)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(CaveBlocks.cavenium_ore, 0), 20, 1, 8, 128, 255)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(CaveBlocks.cavenium_ore, 1), 1, 3, 100, 150, 255)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.coal_ore, 0), 17, 20, 100, 0, 255)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.coal_ore, 0), 85, 1, 10, 0, 255)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.iron_ore, 0), 10, 28, 100, 0, 255)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.iron_ore, 0), 50, 1, 10, 0, 255)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.gold_ore, 0), 8, 3, 100, 0, 127)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.gold_ore, 0), 24, 1, 8, 0, 127)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.redstone_ore, 0), 7, 8, 100, 0, 40)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.redstone_ore, 0), 30, 1, 8, 0, 40)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.lapis_ore, 0), 5, 2, 100, 0, 50)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.lapis_ore, 0), 18, 1, 8, 0, 50)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.diamond_ore, 0), 8, 1, 100, 0, 20)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.diamond_ore, 0), 15, 1, 5, 0, 20)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.emerald_ore, 0), 5, 3, 100, 50, 255, null, Type.MOUNTAIN, Type.HILLS)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.emerald_ore, 0), 16, 1, 6, 50, 255, null, Type.MOUNTAIN, Type.HILLS)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.quartz_ore, 0), 10, 16, 100, 0, 255, new BlockEntry(Blocks.netherrack, 0), Type.NETHER)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.dirt, 0), 25, 20, 100, 0, 255)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.gravel, 0), 20, 6, 100, 0, 255)); CaveworldAPI.addCaveVein( new CaveVein(new BlockEntry(Blocks.sand, 0), 20, 8, 100, 0, 255, null, Type.SANDY)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.sand, 0), 20, 8, 100, 0, 20, new BlockEntry(Blocks.gravel, 0), Type.SANDY)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.soul_sand, 0), 20, 10, 100, 0, 255, new BlockEntry(Blocks.netherrack, 0), Type.NETHER)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.hardened_clay, 1), 24, 20, 100, 0, 255, new BlockEntry(Blocks.dirt, 0), Type.MESA)); CaveworldAPI.addCaveVein(new CaveVein(new BlockEntry(Blocks.hardened_clay, 12), 24, 14, 100, 0, 255, new BlockEntry(Blocks.dirt, 0), Type.MESA)); } else { int i = 0; for (String name : veinsCfg.getCategoryNames()) { if (NumberUtils.isNumber(name)) { CaveworldAPI.addCaveVein(null); } else ++i; } if (i > 0) { try { FileUtils.forceDelete(new File(veinsCfg.toString())); CaveworldAPI.clearCaveVeins(); veinsCfg = null; syncVeinsCfg(); } catch (Exception e) { e.printStackTrace(); } } } if (veinsCfg.hasChanged()) { veinsCfg.save(); } } }