Rewritten world generation, new ores.json config file
This commit is contained in:
parent
8ab9ecd28e
commit
28dda59ed5
12 changed files with 200 additions and 353 deletions
|
@ -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());
|
||||
|
|
|
@ -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)];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<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();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
|
||||
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, @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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
12
src/main/java/techreborn/world/config/IOreNameProvider.java
Normal file
12
src/main/java/techreborn/world/config/IOreNameProvider.java
Normal 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);
|
||||
|
||||
}
|
|
@ -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;
|
20
src/main/java/techreborn/world/config/RubberTreeConfig.java
Normal file
20
src/main/java/techreborn/world/config/RubberTreeConfig.java
Normal 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;
|
||||
}
|
|
@ -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();
|
||||
}
|
Loading…
Add table
Reference in a new issue