Rewritten world generation, new ores.json config file

This commit is contained in:
modmuss50 2016-03-11 20:24:05 +00:00
parent 8ab9ecd28e
commit 28dda59ed5
12 changed files with 200 additions and 353 deletions

View file

@ -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());

View file

@ -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)];
}
}

View file

@ -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)];
}
}

View file

@ -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<Block> 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);
}
}

View file

@ -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;
@ -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));
}

View file

@ -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);
}
}
}
}

View file

@ -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));
if(!jsonInvalid){
save();
}
}
private List<OreConfig> getMissingOres(List<OreConfig> config, List<OreConfig> defaultOres){
private List<OreConfig> getMissingOres(List<OreConfig> config, List<OreConfig> defaultOres) {
List<OreConfig> 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<WorldGenConfig>(){}.getType();
Type typeOfHashMap = new TypeToken<WorldGenConfig>() {
}.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();
}
}
public List<OreConfig> getAllGenOresFromList(List<OreConfig> configList) {
List<OreConfig> 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, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
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<OreConfig> 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;
}
}
}
}
}

View file

@ -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;
}
}
}
}
}
}

View file

@ -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);
}

View file

@ -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;

View file

@ -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;
}

View file

@ -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<OreConfig> overworldOres;
public List<OreConfig> neatherOres;
public List<OreConfig> endOres;
public RubberTreeConfig rubberTreeConfig = new RubberTreeConfig();
}