Okay so after many frustrating attempts to make the previous code work, I gave up and decided to rewrite my class and came up with the code below.
Unfortunately, this is causing some horrible tick-lag and I'm not quite sure what I can do about it.
WorldGenModMinable.java
package com.tehseph.sephsmod.worldgen;
import com.tehseph.sephsmod.block.BlockMeta;
import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import java.util.Random;
public class WorldGenModMinable implements IWorldGenerator {
private int dimensionID;
private Block replaceTarget;
private Block oreBlock;
private int veinSize, veinCount;
private int minY, maxY;
public WorldGenModMinable(int dimensionID, Block replaceTarget, Block oreBlock, int veinSize, int veinCount, int minY, int maxY) {
this.dimensionID = dimensionID;
this.replaceTarget = replaceTarget;
this.oreBlock = oreBlock;
this.veinSize = veinSize;
this.veinCount = veinCount;
this.minY = minY;
this.maxY = maxY;
}
@Override
public void generate(Random random, int chunkX, int chunkZ, World worldObj, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
if (worldObj.provider.dimensionId == this.dimensionID) {
if (this.oreBlock instanceof BlockMeta) {
for (int metadata = 0; metadata < ((BlockMeta) this.oreBlock).metaNames.length; metadata++) {
for (int i = 0; i < this.veinCount; i++) {
int randX = (chunkX * 16) + random.nextInt(16);
int randZ = (chunkZ * 16) + random.nextInt(16);
int randY = this.minY + random.nextInt(this.maxY - this.minY);
(new WorldGenMinable(this.oreBlock, metadata, this.veinSize, this.replaceTarget)).generate(worldObj, random, randX, randY, randZ);
}
}
} else {
for (int i = 0; i < this.veinCount; i++) {
int randX = (chunkX * 16) + random.nextInt(16);
int randZ = (chunkZ * 16) + random.nextInt(16);
int randY = this.minY + random.nextInt(this.maxY - this.minY);
(new WorldGenMinable(this.oreBlock, this.veinSize, this.replaceTarget)).generate(worldObj, random, randX, randY, randZ);
}
}
}
}
}
So, my new problem is this: How can I optimize this to lower the ticking times?
EDIT: So it appears after doing some research, the tick-lag is not my fault and is actually poor vanilla code changes made in 1.7.10.
This post on the FTB forums has a few JVM arguments that can help combat the lag as well as a mention to FastCraft, a WIP mod written by IC2's Player that helps to greatly improve the ridiculous 1.7.10 chunk loading issues.
I've left my metadata block generation code above just in case it helps anyone out who might have come across this thread, but all problems are (kind of) solved now. At least, everything in my code is solved.