aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/MineShaftFeature.cpp
blob: ebf59025d6431215fcc4c84fc816cef16864a15b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include "net.minecraft.world.level.levelgen.structure.h"
#include "JavaMath.h"
#include "Mth.h"

const wstring MineShaftFeature::OPTION_CHANCE = L"chance";

MineShaftFeature::MineShaftFeature()
{
	chance = 0.01;
}

wstring MineShaftFeature::getFeatureName()
{
	return L"Mineshaft";
}

MineShaftFeature::MineShaftFeature(unordered_map<wstring, wstring> options)
{
	chance = 0.01;

	for(auto& option : options)
	{
		if (option.first.compare(OPTION_CHANCE) == 0)
		{
			chance = Mth::getDouble(option.second, chance);
		}
	}
}

bool MineShaftFeature::isFeatureChunk(int x, int z, bool bIsSuperflat)
{
	bool forcePlacement = false;
	LevelGenerationOptions *levelGenOptions = app.getLevelGenerationOptions();
	if( levelGenOptions != nullptr )
	{
		forcePlacement = levelGenOptions->isFeatureChunk(x,z,eFeature_Mineshaft);
	}

	return forcePlacement || (random->nextDouble() < chance && random->nextInt(80) < max(abs(x), abs(z)));
}

StructureStart *MineShaftFeature::createStructureStart(int x, int z)
{
	// 4J added
	app.AddTerrainFeaturePosition(eTerrainFeature_Mineshaft,x,z);

	return new MineShaftStart(level, random, x, z);
}