aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/ScatteredFeaturePieces.h
blob: 5fb334df55080073c09f9afa201ce809c5c0c388 (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#pragma once

#include "StructurePiece.h"

class ScatteredFeaturePieces
{
public:
	static void loadStatic();

private:
	class ScatteredFeaturePiece : public StructurePiece
	{
	protected:
		int width;
		int height;
		int depth;

		int heightPosition;

		ScatteredFeaturePiece();
		ScatteredFeaturePiece(Random *random, int west, int floor, int north, int width, int height, int depth);

		virtual void addAdditonalSaveData(CompoundTag *tag);
		virtual void readAdditonalSaveData(CompoundTag *tag);
		bool updateAverageGroundHeight(Level *level, BoundingBox *chunkBB, int offset);
	};

public:
	class DesertPyramidPiece : public ScatteredFeaturePiece
	{
	public:
		static StructurePiece *Create() { return new DesertPyramidPiece(); }
		virtual EStructurePiece GetType() { return eStructurePiece_DesertPyramidPiece; }

	public:
		static const int TREASURE_ITEMS_COUNT = 10;
	private:
		bool hasPlacedChest[4];
		static WeighedTreasure *treasureItems[TREASURE_ITEMS_COUNT];

	public:
		DesertPyramidPiece();
		DesertPyramidPiece(Random *random, int west, int north);

	protected:
		virtual void addAdditonalSaveData(CompoundTag *tag);
		virtual void readAdditonalSaveData(CompoundTag *tag);

		bool postProcess(Level *level, Random *random, BoundingBox *chunkBB);

	};

	class JunglePyramidPiece : public ScatteredFeaturePiece
	{
	public:
		static StructurePiece *Create() { return new JunglePyramidPiece(); }
		virtual EStructurePiece GetType() { return eStructurePiece_JunglePyramidPiece; }

	public:
		static const int TREASURE_ITEMS_COUNT = 10;
		static const int DISPENSER_ITEMS_COUNT = 1;
	private:
		bool placedMainChest;
		bool placedHiddenChest;
		bool placedTrap1;
		bool placedTrap2;

		static WeighedTreasure *treasureItems[TREASURE_ITEMS_COUNT];
		static WeighedTreasure *dispenserItems[DISPENSER_ITEMS_COUNT];

	public:
		JunglePyramidPiece();
		JunglePyramidPiece(Random *random, int west, int north);

	protected:
		virtual void addAdditonalSaveData(CompoundTag *tag);
		virtual void readAdditonalSaveData(CompoundTag *tag);

	public:
		bool postProcess(Level *level, Random *random, BoundingBox *chunkBB);

	private:
		class MossStoneSelector : public BlockSelector
		{
		public:
			void next(Random *random, int worldX, int worldY, int worldZ, bool isEdge);
		};

		static MossStoneSelector stoneSelector;

	};

	class SwamplandHut : public ScatteredFeaturePiece
	{
	public:
		static StructurePiece *Create() { return new SwamplandHut(); }
		virtual EStructurePiece GetType() { return eStructurePiece_SwamplandHut; }

	private:
		bool spawnedWitch;

	public:
		SwamplandHut();
		SwamplandHut(Random *random, int west, int north);

	protected:
		virtual void addAdditonalSaveData(CompoundTag *tag);
		virtual void readAdditonalSaveData(CompoundTag *tag);

	public:
		bool postProcess(Level *level, Random *random, BoundingBox *chunkBB);
	};
};