package rtg.world.biome.deco;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockVine;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.gen.feature.WorldGenerator;
import net.minecraftforge.event.terraingen.TerrainGen;
import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS;
import rtg.api.world.RTGWorld;
import rtg.world.biome.realistic.RealisticBiomeBase;
import rtg.world.gen.feature.WorldGenVinesRTG;
/**
* @author WhichOnesPink
*/
public class DecoVines extends DecoBase {
private int loops;
private float strengthFactor;
private Block vineBlock;
private int minY;
private int maxY;
private PropertyBool propNorth;
private PropertyBool propEast;
private PropertyBool propSouth;
private PropertyBool propWest;
protected WorldGenerator worldGenerator;
public DecoVines() {
super();
this.setLoops(1);
this.setStrengthFactor(0f);
this.setMinY(63);
this.setMaxY(200);
this.vineBlock = Blocks.VINE;
this.propNorth = BlockVine.NORTH;
this.propEast = BlockVine.EAST;
this.propSouth = BlockVine.SOUTH;
this.propWest = BlockVine.WEST;
this.addDecoTypes(DecoType.VINE);
}
@Override
public boolean properlyDefined() {
try {
IBlockState vineTest = this.vineBlock.getDefaultState()
.withProperty(this.propNorth, true)
.withProperty(this.propEast, false)
.withProperty(this.propSouth, false)
.withProperty(this.propWest, false);
}
catch (Exception e) {
return false;
}
return true;
}
@Override
public void generate(RealisticBiomeBase biome, RTGWorld rtgWorld, Random rand, int worldX, int worldZ, float strength, float river, boolean hasPlacedVillageBlocks) {
if (this.allowed) {
if (TerrainGen.decorate(rtgWorld.world, rand, new BlockPos(worldX, 0, worldZ), GRASS)) {
this.worldGenerator = new WorldGenVinesRTG(this.vineBlock, this.maxY, this.propNorth, this.propEast, this.propSouth, this.propWest);
this.setLoops((this.strengthFactor > 0f) ? (int) (this.strengthFactor * strength) : this.loops);
for (int i = 0; i < this.loops; i++) {
int intX = worldX + rand.nextInt(16);// + 8;
int intZ = worldZ + rand.nextInt(16);// + 8;
int intY = this.minY;
worldGenerator.generate(rtgWorld.world, rand, new BlockPos(intX, intY, intZ));
}
}
}
}
public int getLoops() {
return loops;
}
public DecoVines setLoops(int loops) {
this.loops = loops;
return this;
}
public float getStrengthFactor() {
return strengthFactor;
}
public DecoVines setStrengthFactor(float strengthFactor) {
this.strengthFactor = strengthFactor;
return this;
}
public Block getVineBlock() {
return vineBlock;
}
public DecoVines setVineBlock(Block vineBlock) {
this.vineBlock = vineBlock;
return this;
}
public int getMinY() {
return minY;
}
public DecoVines setMinY(int minY) {
this.minY = minY;
return this;
}
public int getMaxY() {
return maxY;
}
public DecoVines setMaxY(int maxY) {
this.maxY = maxY;
return this;
}
public PropertyBool getPropNorth() {
return propNorth;
}
public DecoVines setPropNorth(PropertyBool propNorth) {
this.propNorth = propNorth;
return this;
}
public PropertyBool getPropEast() {
return propEast;
}
public DecoVines setPropEast(PropertyBool propEast) {
this.propEast = propEast;
return this;
}
public PropertyBool getPropSouth() {
return propSouth;
}
public DecoVines setPropSouth(PropertyBool propSouth) {
this.propSouth = propSouth;
return this;
}
public PropertyBool getPropWest() {
return propWest;
}
public DecoVines setPropWest(PropertyBool propWest) {
this.propWest = propWest;
return this;
}
}