aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/BeaconTileEntity.h
blob: eaf3847e7317b12dba1ff00790741bbdc99e4ae1 (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
#pragma once
#include "TileEntity.h"
#include "Container.h"

class BeaconTileEntity : public TileEntity, public Container
{
public:
	eINSTANCEOF GetType() { return eTYPE_BEACONTILEENTITY; }
	static TileEntity *create() { return new BeaconTileEntity(); }
	// 4J Added
	virtual shared_ptr<TileEntity> clone();

private:
	static const int SCALE_TIME = SharedConstants::TICKS_PER_SECOND * 2;

public:
	static const int BEACON_EFFECTS_TIERS = 4;
	static const int BEACON_EFFECTS_EFFECTS = 3;
	static MobEffect *BEACON_EFFECTS[BEACON_EFFECTS_TIERS][BEACON_EFFECTS_EFFECTS];

	static void staticCtor();

private:
	int64_t clientSideRenderTick;
	float clientSideRenderScale;

	bool isActive;
	int levels;

	int primaryPower;
	int secondaryPower;

	shared_ptr<ItemInstance> paymentItem;
	wstring name;

public:
	BeaconTileEntity();

	void tick();

private:
	void applyEffects();
	void updateShape();

public:
	float getAndUpdateClientSideScale();
	int getPrimaryPower();
	int getSecondaryPower();
	int getLevels();
	// client-side method used by GUI
	void setLevels(int levels);
	void setPrimaryPower(int primaryPower);
	void setSecondaryPower(int secondaryPower);
	shared_ptr<Packet> getUpdatePacket();
	double getViewDistance();
	void load(CompoundTag *tag);
	void save(CompoundTag *tag);
	unsigned int getContainerSize();
	shared_ptr<ItemInstance> getItem(unsigned int slot);
	shared_ptr<ItemInstance> removeItem(unsigned int slot, int count);
	shared_ptr<ItemInstance> removeItemNoUpdate(int slot);
	void setItem(unsigned int slot, shared_ptr<ItemInstance> item);
	wstring getName();
	wstring getCustomName();
	bool hasCustomName();
	void setCustomName(const wstring &name);
	int getMaxStackSize() const;
	bool stillValid(shared_ptr<Player> player);
	void startOpen();
	void stopOpen();
	bool canPlaceItem(int slot, shared_ptr<ItemInstance> item);

	// 4J Stu - For container
	virtual void setChanged() { TileEntity::setChanged(); }
};