That's one heck of a commit you've got there...

I may have got a bit behind with version control. A lot behind, in fact. Maybe I'll go back and split this sometime - then again, I probably won't. But hey, at least it's here!
This commit is contained in:
Electroblob77
2019-08-18 00:04:18 +01:00
parent 2680d02304
commit f37812be3e
1564 changed files with 47652 additions and 12984 deletions
@@ -0,0 +1,51 @@
package electroblob.wizardry.worldgen;
import net.minecraft.block.BlockStoneBrick;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.gen.structure.template.ITemplateProcessor;
import net.minecraft.world.gen.structure.template.Template;
import javax.annotation.Nullable;
/** Structure template processor that randomly 'mossifies' cobblestone and stone bricks in the structure. This is done
* using weighting so there is more moss at the bottom, making it look more natural. */
// Behold, the ACME Mossifier 3000! (Patent pending)
public class MossifierTemplateProcessor implements ITemplateProcessor {
private final float mossiness;
private final float heightWeight;
private final int groundLevel;
/**
* Creates a new {@code MossifierTemplateProcessor} with the given parameters.
* @param mossiness The chance for each block in a given layer to be mossified.
* @param heightWeight The amount by which mossiness reduces for each subsequent level upwards.
* @param groundLevel The ground level for the structure, at which height is taken to be zero for the purposes of
* calculating mossiness.
*/
public MossifierTemplateProcessor(float mossiness, float heightWeight, int groundLevel){
this.mossiness = mossiness;
this.heightWeight = heightWeight;
this.groundLevel = groundLevel;
}
@Nullable
@Override
public Template.BlockInfo processBlock(World world, BlockPos pos, Template.BlockInfo info){
float chance = mossiness - heightWeight * (pos.getY() - groundLevel);
if(world.rand.nextFloat() < chance){
if(info.blockState.getBlock() == Blocks.COBBLESTONE){
return new Template.BlockInfo(info.pos, Blocks.MOSSY_COBBLESTONE.getDefaultState(), info.tileentityData);
}else if(info.blockState.getBlock() == Blocks.STONEBRICK){
return new Template.BlockInfo(info.pos, Blocks.STONEBRICK.getDefaultState()
.withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.MOSSY), info.tileentityData);
}
}
return info;
}
}