#pragma once #include "TileEntity.h" #include "../../Containers/Container.h" class BeaconTileEntity : public TileEntity, public Container { public: eINSTANCEOF GetType() { return eTYPE_BEACONTILEENTITY; } static TileEntity* create() { return new BeaconTileEntity(); } // 4J Added virtual std::shared_ptr 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; std::shared_ptr paymentItem; std::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); std::shared_ptr getUpdatePacket(); double getViewDistance(); void load(CompoundTag* tag); void save(CompoundTag* tag); unsigned int getContainerSize(); std::shared_ptr getItem(unsigned int slot); std::shared_ptr removeItem(unsigned int slot, int count); std::shared_ptr removeItemNoUpdate(int slot); void setItem(unsigned int slot, std::shared_ptr item); std::wstring getName(); std::wstring getCustomName(); bool hasCustomName(); void setCustomName(const std::wstring& name); int getMaxStackSize(); bool stillValid(std::shared_ptr player); void startOpen(); void stopOpen(); bool canPlaceItem(int slot, std::shared_ptr item); // 4J Stu - For container virtual void setChanged() { TileEntity::setChanged(); } };