diff --git a/src/main/java/techreborn/Core.java b/src/main/java/techreborn/Core.java index d97c5ba0a..425746c22 100644 --- a/src/main/java/techreborn/Core.java +++ b/src/main/java/techreborn/Core.java @@ -40,9 +40,7 @@ import techreborn.packets.PacketAesu; import techreborn.packets.PacketIdsu; import techreborn.proxies.CommonProxy; import techreborn.tiles.idsu.IDSUManager; -import techreborn.world.TROreGen; import techreborn.world.TechRebornWorldGen; -import techreborn.world.TreeGenerator; @Mod(modid = ModInfo.MOD_ID, name = ModInfo.MOD_NAME, version = ModInfo.MOD_VERSION, dependencies = ModInfo.MOD_DEPENDENCUIES, guiFactory = ModInfo.GUI_FACTORY_CLASS, acceptedMinecraftVersions = "[1.8.8,1.8.9]") public class Core { @@ -118,8 +116,7 @@ public class Core { proxy.init(); // WorldGen worldGen.load(); - GameRegistry.registerWorldGenerator(new TROreGen(), 0); - GameRegistry.registerWorldGenerator(new TreeGenerator(), 0); + GameRegistry.registerWorldGenerator(worldGen, 0); // DungeonLoot.init(); // Register Gui Handler NetworkRegistry.INSTANCE.registerGuiHandler(INSTANCE, new GuiHandler()); diff --git a/src/main/java/techreborn/blocks/BlockOre.java b/src/main/java/techreborn/blocks/BlockOre.java index db89231dd..f36d724a3 100644 --- a/src/main/java/techreborn/blocks/BlockOre.java +++ b/src/main/java/techreborn/blocks/BlockOre.java @@ -30,8 +30,9 @@ import techreborn.config.ConfigTechReborn; import techreborn.init.ModBlocks; import techreborn.items.ItemDusts; import techreborn.items.ItemGems; +import techreborn.world.config.IOreNameProvider; -public class BlockOre extends BaseBlock implements ITexturedBlock { +public class BlockOre extends BaseBlock implements ITexturedBlock, IOreNameProvider { public static ItemStack getOreByName(String name, int count) { for (int i = 0; i < types.length; i++) { @@ -39,7 +40,7 @@ public class BlockOre extends BaseBlock implements ITexturedBlock { return new ItemStack(ModBlocks.ore, count, i); } } - throw new InvalidParameterException("The storage block " + name + " could not be found."); + throw new InvalidParameterException("The ore block " + name + " could not be found."); } public static ItemStack getOreByName(String name) { @@ -49,11 +50,14 @@ public class BlockOre extends BaseBlock implements ITexturedBlock { public IBlockState getBlockStateFromName(String name){ int index = -1; for (int i = 0; i < types.length; i++) { - if (types[i].equals(name)) { + if (types[i].equalsIgnoreCase(name)) { index = i; break; } } + if(index == -1){ + return ModBlocks.ore2.getBlockStateFromName(name); + } return getStateFromMeta(index); } @@ -188,4 +192,8 @@ public class BlockOre extends BaseBlock implements ITexturedBlock { return new BlockState(this, METADATA); } + @Override + public String getUserLoclisedName(IBlockState state) { + return types[state.getValue(METADATA)]; + } } diff --git a/src/main/java/techreborn/blocks/BlockOre2.java b/src/main/java/techreborn/blocks/BlockOre2.java index 1e4267286..63420291f 100644 --- a/src/main/java/techreborn/blocks/BlockOre2.java +++ b/src/main/java/techreborn/blocks/BlockOre2.java @@ -21,8 +21,9 @@ import net.minecraftforge.fml.relauncher.SideOnly; import reborncore.common.BaseBlock; import techreborn.client.TechRebornCreativeTabMisc; import techreborn.init.ModBlocks; +import techreborn.world.config.IOreNameProvider; -public class BlockOre2 extends BaseBlock implements ITexturedBlock { +public class BlockOre2 extends BaseBlock implements ITexturedBlock, IOreNameProvider { public static ItemStack getOreByName(String name, int count) { for (int i = 0; i < types.length; i++) { @@ -30,7 +31,7 @@ public class BlockOre2 extends BaseBlock implements ITexturedBlock { return new ItemStack(ModBlocks.ore2, count, i); } } - throw new InvalidParameterException("The storage block " + name + " could not be found."); + throw new InvalidParameterException("The ore block " + name + " could not be found."); } public static ItemStack getOreByName(String name) { @@ -45,6 +46,9 @@ public class BlockOre2 extends BaseBlock implements ITexturedBlock { break; } } + if(index == -1){ + throw new InvalidParameterException("The ore block " + name + " could not be found."); + } return getStateFromMeta(index); } @@ -112,4 +116,8 @@ public class BlockOre2 extends BaseBlock implements ITexturedBlock { return new BlockState(this, METADATA); } + @Override + public String getUserLoclisedName(IBlockState state) { + return types[state.getValue(METADATA)]; + } } diff --git a/src/main/java/techreborn/command/TechRebornDevCommand.java b/src/main/java/techreborn/command/TechRebornDevCommand.java index c0300dac4..256e0c146 100644 --- a/src/main/java/techreborn/command/TechRebornDevCommand.java +++ b/src/main/java/techreborn/command/TechRebornDevCommand.java @@ -1,6 +1,7 @@ package techreborn.command; +import net.minecraft.block.Block; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayerMP; @@ -11,6 +12,9 @@ import net.minecraftforge.fluids.Fluid; import reborncore.api.fuel.FluidPowerManager; import techreborn.api.recipe.RecipeHandler; +import java.util.ArrayList; +import java.util.List; + public class TechRebornDevCommand extends CommandBase { @Override @@ -48,11 +52,15 @@ public class TechRebornDevCommand extends CommandBase { } } else if ("clear".equals(args[0])) { EntityPlayerMP playerMP = (EntityPlayerMP) sender; + List blocksToRemove = new ArrayList<>(); + blocksToRemove.add(Blocks.grass); + blocksToRemove.add(Blocks.dirt); + blocksToRemove.add(Blocks.stone); for (int x = 0; x < 25; x++) { for (int z = 0; z < 25; z++) { for (int y = 0; y < playerMP.posY; y++) { BlockPos pos = new BlockPos(playerMP.posX + x, y, playerMP.posZ + z); - if (playerMP.worldObj.getBlockState(pos).getBlock() == Blocks.stone || playerMP.worldObj.getBlockState(pos).getBlock() == Blocks.dirt) { + if (blocksToRemove.contains(playerMP.worldObj.getBlockState(pos).getBlock())) { playerMP.worldObj.setBlockState(pos, Blocks.air.getDefaultState(), 2); } } diff --git a/src/main/java/techreborn/world/RubberTreeGenerator.java b/src/main/java/techreborn/world/RubberTreeGenerator.java index 6868b72fb..52d50ac37 100644 --- a/src/main/java/techreborn/world/RubberTreeGenerator.java +++ b/src/main/java/techreborn/world/RubberTreeGenerator.java @@ -9,6 +9,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.IPlantable; +import techreborn.Core; import techreborn.blocks.BlockRubberLeaves; import techreborn.blocks.BlockRubberLog; import techreborn.init.ModBlocks; @@ -55,7 +56,7 @@ public class RubberTreeGenerator extends WorldGenerator { } public boolean growTree(World world, Random rand, int x, int y, int z) { - int treeHeight = rand.nextInt(5) + 5; + int treeHeight = rand.nextInt(5) + Core.worldGen.config.rubberTreeConfig.treeBaseHeight; int worldHeight = world.getHeight(); if (y >= 1 && y + treeHeight + 1 <= worldHeight) { int xOffset; @@ -88,7 +89,7 @@ public class RubberTreeGenerator extends WorldGenerator { return false; } } - + BlockPos treeBase = new BlockPos(x, y, z); BlockPos treeRoot = treeBase.down(); world.getBlockState(treeRoot).getBlock().onPlantGrow(world, treeRoot, treeBase); @@ -117,11 +118,11 @@ public class RubberTreeGenerator extends WorldGenerator { if (block == null || block.isAir(world, blockpos) || block.isLeaves(world, blockpos) || block.isReplaceable(world, blockpos)) { IBlockState newState = ModBlocks.rubberLog.getDefaultState(); boolean isAddingSap = false; - if(rand.nextInt(10) == 0){ + if (rand.nextInt(Core.worldGen.config.rubberTreeConfig.sapRarity) == 0) { newState = newState.withProperty(BlockRubberLog.HAS_SAP, true).withProperty(BlockRubberLog.SAP_SIDE, EnumFacing.getHorizontal(rand.nextInt(4))); isAddingSap = true; } - if(isAddingSap){ + if (isAddingSap) { world.setBlockState(blockpos, newState, 2); } else { this.setBlockAndNotifyAdequately(world, blockpos, newState); @@ -130,8 +131,8 @@ public class RubberTreeGenerator extends WorldGenerator { topLogPos = blockpos; } } - if(topLogPos != null){ - for (int i = 0; i < 4; i++) { + if (topLogPos != null) { + for (int i = 0; i < Core.worldGen.config.rubberTreeConfig.spireHeight; i++) { BlockPos spikePos = topLogPos.up(i); this.setBlockAndNotifyAdequately(world, spikePos, ModBlocks.rubberLeaves.getDefaultState().withProperty(BlockRubberLeaves.DECAYABLE, true)); } diff --git a/src/main/java/techreborn/world/TROreGen.java b/src/main/java/techreborn/world/TROreGen.java deleted file mode 100644 index 6de36c982..000000000 --- a/src/main/java/techreborn/world/TROreGen.java +++ /dev/null @@ -1,259 +0,0 @@ -package techreborn.world; - -import java.util.Random; - -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraft.world.gen.feature.WorldGenMinable; -import net.minecraftforge.fml.common.IWorldGenerator; -import techreborn.Core; -import techreborn.config.ConfigTechReborn; -import techreborn.init.ModBlocks; - -public class TROreGen implements IWorldGenerator { - public static ConfigTechReborn config; - - WorldGenMinable oreGalena; - WorldGenMinable oreIridium; - WorldGenMinable oreRuby; - WorldGenMinable oreSapphire; - WorldGenMinable oreBauxite; - WorldGenMinable orePyrite; - WorldGenMinable oreCinnabar; - WorldGenMinable oreSphalerite; - WorldGenMinable oreTungston; - WorldGenMinable oreSheldonite; - WorldGenMinable orePeridot; - WorldGenMinable oreSodalite; - WorldGenMinable oreTetrahedrite; - WorldGenMinable oreCassiterite; - WorldGenMinable oreLead; - WorldGenMinable oreSilver; - WorldGenMinable oreCopper; - WorldGenMinable oreTin; - - public TROreGen() { - // World - oreGalena = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Galena"), ConfigTechReborn.GalenaOreRare); - oreIridium = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Iridium"), ConfigTechReborn.IridiumOreRare); - oreRuby = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Ruby"), ConfigTechReborn.RubyOreRare); - oreSapphire = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Sapphire"), ConfigTechReborn.SapphireOreRare); - oreBauxite = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Bauxite"), ConfigTechReborn.BauxiteOreRare); - oreTetrahedrite = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Tetrahedrite"), ConfigTechReborn.TetrahedriteOreRare); - oreCassiterite = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Cassiterite"), ConfigTechReborn.CassiteriteOreRare); - oreLead = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Lead"), ConfigTechReborn.LeadOreRare); - oreSilver = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Silver"), ConfigTechReborn.SilverOreRare); - oreCopper = new WorldGenMinable(ModBlocks.ore2.getBlockStateFromName("copper"), ConfigTechReborn.CopperOreRare); - oreTin = new WorldGenMinable(ModBlocks.ore2.getBlockStateFromName("tin"), ConfigTechReborn.TinOreRare); - - // Nether - orePyrite = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Pyrite"), ConfigTechReborn.PyriteOreRare); - oreCinnabar = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Cinnabar"), ConfigTechReborn.CinnabarOreRare); - oreSphalerite = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Sphalerite"), ConfigTechReborn.SphaleriteOreRare); - - // End - oreTungston = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Tungston"), ConfigTechReborn.TungstenOreRare); - oreSheldonite = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Sheldonite"), ConfigTechReborn.SheldoniteOreRare); - orePeridot = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Peridot"), ConfigTechReborn.PeridotOreRare); - oreSodalite = new WorldGenMinable(ModBlocks.ore.getBlockStateFromName("Sodalite"), ConfigTechReborn.SodaliteOreRare); - - Core.logHelper.info("WorldGen Loaded"); - } - - public void retroGen(Random random, int chunkX, int chunkZ, World world) { - //TODO - generateUndergroundOres(random, chunkX, chunkZ, world); - generateHellOres(random, chunkX, chunkZ, world); - generateEndOres(random, chunkX, chunkZ, world); - world.getChunkFromChunkCoords(chunkX, chunkZ).setChunkModified(); - } - - @Override - public void generate(Random random, int xChunk, int zChunk, World world, - IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { - - if (world.provider.isSurfaceWorld()) { - generateUndergroundOres(random, xChunk * 16, zChunk * 16, world); - } else if (world.provider.getDimensionId() == 0) { - generateHellOres(random, xChunk * 16, zChunk * 16, world); - } else if (world.provider.getDimensionId() == 1) { - generateEndOres(random, xChunk * 16, zChunk * 16, world); - } - - } - - void generateUndergroundOres(Random random, int xChunk, int zChunk, World world) { - int xPos, yPos, zPos; - if (config.GalenaOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreGalena.generate(world, random, pos); - } - } - if (config.IridiumOreTrue) { - for (int i = 0; i <= 1; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(1); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreIridium.generate(world, random, pos); - } - } - if (config.RubyOreTrue) { - for (int i = 0; i <= 3; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreRuby.generate(world, random, pos); - } - } - if (config.SapphireOreTrue) { - for (int i = 0; i <= 3; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreSapphire.generate(world, random, pos); - } - } - if (config.BauxiteOreTrue) { - for (int i = 0; i <= 10; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreBauxite.generate(world, random, pos); - } - } - if (config.TetrahedriteOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreTetrahedrite.generate(world, random, pos); - } - } - if (config.CassiteriteOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 20); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreCassiterite.generate(world, random, pos); - } - } - if (config.LeadOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 20); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreLead.generate(world, random, pos); - } - } - if (config.SilverOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 20); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreSilver.generate(world, random, pos); - } - } - if (config.CopperOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 20); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreCopper.generate(world, random, pos); - } - } - if (config.TinOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 20); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreTin.generate(world, random, pos); - } - } - } - - void generateHellOres(Random random, int xChunk, int zChunk, World world) { - int xPos, yPos, zPos; - if (config.PyriteOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - orePyrite.generate(world, random, pos); - } - } - if (config.CinnabarOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreCinnabar.generate(world, random, pos); - } - } - if (config.SphaleriteOreTrue) { - for (int i = 0; i <= 16; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreSphalerite.generate(world, random, pos); - } - } - } - - void generateEndOres(Random random, int xChunk, int zChunk, World world) { - int xPos, yPos, zPos; - if (config.TungstenOreTrue) { - for (int i = 0; i <= 2; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreTungston.generate(world, random, pos); - } - } - if (config.SheldoniteOreTrue) { - for (int i = 0; i <= 3; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreSheldonite.generate(world, random, pos); - } - } - if (config.PeridotOreTrue) { - for (int i = 0; i <= 3; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - orePeridot.generate(world, random, pos); - } - } - if (config.SodaliteOreTrue) { - for (int i = 0; i <= 3; i++) { - xPos = xChunk + random.nextInt(16); - yPos = 10 + random.nextInt(60 - 10); - zPos = zChunk + random.nextInt(16); - BlockPos pos = new BlockPos(xPos, yPos, zPos); - oreSodalite.generate(world, random, pos); - } - } - } -} diff --git a/src/main/java/techreborn/world/TechRebornWorldGen.java b/src/main/java/techreborn/world/TechRebornWorldGen.java index 217bc38d1..3d5ad3ab8 100644 --- a/src/main/java/techreborn/world/TechRebornWorldGen.java +++ b/src/main/java/techreborn/world/TechRebornWorldGen.java @@ -3,27 +3,31 @@ package techreborn.world; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; -import mcmultipart.raytrace.PartMOP; +import net.minecraft.util.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.feature.WorldGenMinable; +import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.fml.common.IWorldGenerator; import techreborn.Core; -import techreborn.config.ConfigTechReborn; import techreborn.init.ModBlocks; +import techreborn.world.config.OreConfig; +import techreborn.world.config.WorldGenConfig; +import javax.annotation.Nullable; import java.io.*; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Random; -import java.util.TreeMap; /** * Created by modmuss50 on 11/03/2016. */ public class TechRebornWorldGen implements IWorldGenerator { - private void init(){ + private void init() { defaultConfig = new WorldGenConfig(); defaultConfig.overworldOres = new ArrayList<>(); defaultConfig.endOres = new ArrayList<>(); @@ -32,7 +36,14 @@ public class TechRebornWorldGen implements IWorldGenerator { defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Galena"), 8, 16, 10, 60)); defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Iridium"), 1, 1, 10, 60)); defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Ruby"), 6, 3, 10, 60)); - //TODO add the rest of the overworld ones + defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Sapphire"), 6, 3, 10, 60)); + defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Bauxite"), 6, 10, 10, 60)); + defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Tetrahedrite"), 6, 16, 10, 60)); + defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Cassiterite"), 6, 16, 20, 60)); + defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Lead"), 6, 16, 20, 60)); + defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Silver"), 6, 16, 20, 60)); + defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("copper"), 8, 16, 20, 60)); + defaultConfig.overworldOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("tin"), 8, 16, 20, 60)); defaultConfig.neatherOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Pyrite"), 6, 3, 10, 250)); defaultConfig.neatherOres.add(new OreConfig(ModBlocks.ore.getBlockStateFromName("Cinnabar"), 6, 3, 10, 250)); @@ -47,10 +58,12 @@ public class TechRebornWorldGen implements IWorldGenerator { WorldGenConfig config; WorldGenConfig defaultConfig; public File configFile; + public static RubberTreeGenerator treeGenerator = new RubberTreeGenerator(); + public boolean jsonInvalid = false; - public void load(){ + public void load() { init(); - if(configFile.exists()){ + if (configFile.exists()) { loadFromJson(); } else { config = defaultConfig; @@ -58,37 +71,45 @@ public class TechRebornWorldGen implements IWorldGenerator { config.overworldOres.addAll(getMissingOres(config.overworldOres, defaultConfig.overworldOres)); config.neatherOres.addAll(getMissingOres(config.neatherOres, defaultConfig.neatherOres)); config.endOres.addAll(getMissingOres(config.endOres, defaultConfig.endOres)); - save(); + if(!jsonInvalid){ + save(); + } } - private List getMissingOres(List config, List defaultOres){ + private List getMissingOres(List config, List defaultOres) { List missingOres = new ArrayList<>(); - for (OreConfig defaultOre : defaultOres){ + for (OreConfig defaultOre : defaultOres) { boolean hasFoundOre = false; - for (OreConfig ore : config){ - if(ore.blockName.equals(defaultOre.blockName) && ore.meta == defaultOre.meta){ + for (OreConfig ore : config) { + if (ore.blockName.equals(defaultOre.blockName) && ore.meta == defaultOre.meta) { hasFoundOre = true; + ore.state = defaultOre.state; //Should allow for states to be saved/loaded } } - if(!hasFoundOre){ + if (!hasFoundOre) { missingOres.add(defaultOre); } } return missingOres; } - private void loadFromJson(){ + private void loadFromJson() { try { Gson gson = new Gson(); BufferedReader reader = new BufferedReader(new FileReader(configFile)); - Type typeOfHashMap = new TypeToken(){}.getType(); + Type typeOfHashMap = new TypeToken() { + }.getType(); config = gson.fromJson(reader, typeOfHashMap); } catch (Exception e) { + Core.logHelper.error("The ores.json file was invalid, bad things are about to happen, I will try and save the world now :"); + config = defaultConfig; + jsonInvalid = true; + Core.logHelper.error("The ores.json file was ignored and the default values loaded, you file will NOT be over written"); e.printStackTrace(); } } - private void save(){ + private void save() { Gson gson = new GsonBuilder().setPrettyPrinting().create(); String json = gson.toJson(config); try { @@ -96,13 +117,81 @@ public class TechRebornWorldGen implements IWorldGenerator { writer.write(json); writer.close(); } catch (IOException e) { - Core.logHelper.error("The ores.json file was invalid, bad things are about to happen"); + Core.logHelper.error("The ores.json file was invalid, something bad happened"); e.printStackTrace(); } } - @Override - public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { + public List getAllGenOresFromList(List configList) { + List list = new ArrayList<>(); + for (OreConfig config : configList) { + if (config.veinSize != 0 && config.veinsPerChunk != 0 && config.shouldSpawn) { + list.add(config); + } + } + return list; + } + @Override + public void generate(Random random, int chunkX, int chunkZ, World world, @Nullable IChunkProvider chunkGenerator, @Nullable IChunkProvider chunkProvider) { + //TODO this could be optimised to not run every chunk gen + if(!config.generateTechRebornFeatures){ + return; + } + boolean genTree = false; + List list = new ArrayList<>(); + if (world.provider.isSurfaceWorld()) { + list.addAll(getAllGenOresFromList(config.overworldOres)); + genTree = true; + } else if (world.provider.getDimensionId() == 0) { + list.addAll(getAllGenOresFromList(config.neatherOres)); + } else if (world.provider.getDimensionId() == 1) { + list.addAll(getAllGenOresFromList(config.endOres)); + } + + if (!list.isEmpty() && config.generateOres) { + int xPos, yPos, zPos; + for (OreConfig ore : list) { + WorldGenMinable worldGenMinable = new WorldGenMinable(ore.state, ore.veinSize); + for (int i = 0; i < ore.veinsPerChunk; i++) { + xPos = chunkX * 16 + random.nextInt(16); + yPos = 10 + random.nextInt(ore.maxYHeight - ore.minYHeight); + zPos = chunkZ * 16 + random.nextInt(16); + BlockPos pos = new BlockPos(xPos, yPos, zPos); + worldGenMinable.generate(world, random, pos); + } + } + } + if (genTree && config.rubberTreeConfig.shouldSpawn) { + int chance = config.rubberTreeConfig.chance; + boolean isValidSpawn = false; + BiomeGenBase biomeGenBase = world.getBiomeGenForCoords(new BlockPos(chunkX * 16, 72, chunkZ * 16)); + if (BiomeDictionary.isBiomeOfType(biomeGenBase, BiomeDictionary.Type.SWAMP)) { + //TODO check the config file for bounds on this, might cause issues + chance -= random.nextInt(10) + 10; + isValidSpawn = true; + } + if (BiomeDictionary.isBiomeOfType(biomeGenBase, BiomeDictionary.Type.FOREST) || BiomeDictionary.isBiomeOfType(biomeGenBase, BiomeDictionary.Type.JUNGLE)) { + chance -= random.nextInt(5) + 3; + isValidSpawn = true; + } + if (!isValidSpawn) { + return; + } + if (random.nextInt(chance) == 0) { + int x = (chunkX * 16) + random.nextInt(15); + int z = (chunkZ * 16) + random.nextInt(15); + for (int i = 0; i < config.rubberTreeConfig.clusterSize; i++) { + int y = world.getActualHeight() - 1; + while (world.isAirBlock(new BlockPos(x, y, z)) && y > 0) { + y--; + } + treeGenerator.generate(world, random, new BlockPos(x, 72, z)); + x += random.nextInt(16) - 8; + z += random.nextInt(16) - 8; + } + + } + } } } diff --git a/src/main/java/techreborn/world/TreeGenerator.java b/src/main/java/techreborn/world/TreeGenerator.java deleted file mode 100644 index d324bae35..000000000 --- a/src/main/java/techreborn/world/TreeGenerator.java +++ /dev/null @@ -1,56 +0,0 @@ -package techreborn.world; - -import java.util.Random; - -import net.minecraft.util.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraftforge.common.BiomeDictionary; -import net.minecraftforge.fml.common.IWorldGenerator; -import techreborn.config.ConfigTechReborn; - -/** - * Created by modmuss50 on 19/02/2016. - */ -public class TreeGenerator implements IWorldGenerator { - - public static RubberTreeGenerator treeGenerator = new RubberTreeGenerator(); - - @Override - public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { - if (ConfigTechReborn.RubberTreeGen) { - int chance = 75; - boolean isValidSpawn = false; - BiomeGenBase biomeGenBase = world.getBiomeGenForCoords(new BlockPos(chunkX * 16, 72, chunkZ * 16)); - if (BiomeDictionary.isBiomeOfType(biomeGenBase, BiomeDictionary.Type.SWAMP)) { - chance -= random.nextInt(10) + 10; - isValidSpawn = true; - } - if (BiomeDictionary.isBiomeOfType(biomeGenBase, BiomeDictionary.Type.FOREST) || BiomeDictionary.isBiomeOfType(biomeGenBase, BiomeDictionary.Type.JUNGLE)) { - chance -= random.nextInt(5) + 3; - isValidSpawn = true; - } - if (!isValidSpawn) { - return; - } - if (world.provider.isSurfaceWorld()) { - if (random.nextInt(chance) == 0) { - int x = (chunkX * 16) + random.nextInt(15); - int z = (chunkZ * 16) + random.nextInt(15); - for (int i = 0; i < 7; i++) { - int y = world.getActualHeight() - 1; - while (world.isAirBlock(new BlockPos(x, y, z)) && y > 0) { - y--; - } - treeGenerator.generate(world, random, new BlockPos(x, 72, z)); - x += random.nextInt(16) - 8; - z += random.nextInt(16) - 8; - } - - } - - } - } - } -} diff --git a/src/main/java/techreborn/world/config/IOreNameProvider.java b/src/main/java/techreborn/world/config/IOreNameProvider.java new file mode 100644 index 000000000..3b7751a29 --- /dev/null +++ b/src/main/java/techreborn/world/config/IOreNameProvider.java @@ -0,0 +1,12 @@ +package techreborn.world.config; + +import net.minecraft.block.state.IBlockState; + +/** + * Created by modmuss50 on 11/03/2016. + */ +public interface IOreNameProvider { + + public String getUserLoclisedName(IBlockState state); + +} diff --git a/src/main/java/techreborn/world/OreConfig.java b/src/main/java/techreborn/world/config/OreConfig.java similarity index 54% rename from src/main/java/techreborn/world/OreConfig.java rename to src/main/java/techreborn/world/config/OreConfig.java index 4863f1462..2e2fbb2c6 100644 --- a/src/main/java/techreborn/world/OreConfig.java +++ b/src/main/java/techreborn/world/config/OreConfig.java @@ -1,4 +1,4 @@ -package techreborn.world; +package techreborn.world.config; import net.minecraft.block.state.IBlockState; @@ -9,8 +9,13 @@ public class OreConfig { public String blockName; + public String blockNiceName; + public int meta; + //This doesn't get written to the json file + public transient IBlockState state; + public int veinSize; public int veinsPerChunk; @@ -19,10 +24,18 @@ public class OreConfig { public int maxYHeight; + public boolean shouldSpawn = true; + public OreConfig(IBlockState blockSate, int veinSize, int veinsPerChunk, int minYHeight, int maxYHeight) { this.meta = blockSate.getBlock().getMetaFromState(blockSate); - this.blockName = blockSate.getBlock().getLocalizedName(); + this.state = blockSate; + this.blockName = blockSate.getBlock().getUnlocalizedName(); + if(blockSate.getBlock() instanceof IOreNameProvider){ + this.blockNiceName = ((IOreNameProvider) blockSate.getBlock()).getUserLoclisedName(blockSate); + } else { + this.blockNiceName = "unknown"; + } this.veinSize = veinSize; this.veinsPerChunk = veinsPerChunk; this.minYHeight = minYHeight; diff --git a/src/main/java/techreborn/world/config/RubberTreeConfig.java b/src/main/java/techreborn/world/config/RubberTreeConfig.java new file mode 100644 index 000000000..235e8893b --- /dev/null +++ b/src/main/java/techreborn/world/config/RubberTreeConfig.java @@ -0,0 +1,20 @@ +package techreborn.world.config; + +/** + * Created by modmuss50 on 11/03/2016. + */ +//TODO add some sanity checks to this +public class RubberTreeConfig { + + public boolean shouldSpawn = true; + + public int chance = 75; + + public int clusterSize = 7; + + public int sapRarity = 10; + + public int spireHeight = 4; + + public int treeBaseHeight = 5; +} diff --git a/src/main/java/techreborn/world/WorldGenConfig.java b/src/main/java/techreborn/world/config/WorldGenConfig.java similarity index 52% rename from src/main/java/techreborn/world/WorldGenConfig.java rename to src/main/java/techreborn/world/config/WorldGenConfig.java index 30cde8b9d..78b3ce52b 100644 --- a/src/main/java/techreborn/world/WorldGenConfig.java +++ b/src/main/java/techreborn/world/config/WorldGenConfig.java @@ -1,4 +1,4 @@ -package techreborn.world; +package techreborn.world.config; import java.util.List; @@ -7,9 +7,15 @@ import java.util.List; */ public class WorldGenConfig { + public boolean generateTechRebornFeatures = true; + + public boolean generateOres = true; + public List overworldOres; public List neatherOres; public List endOres; + + public RubberTreeConfig rubberTreeConfig = new RubberTreeConfig(); }