#pragma once #include "TileEntity.h" #include "Hopper.h" class HopperTileEntity : public TileEntity, public Hopper { public: eINSTANCEOF GetType() { return eTYPE_HOPPERTILEENTITY; } static TileEntity* create() { return new HopperTileEntity(); } // 4J Added virtual std::shared_ptr clone(); public: static const int MOVE_ITEM_SPEED = 8; private: ItemInstanceArray items; std::wstring name; int cooldownTime; public: HopperTileEntity(); ~HopperTileEntity(); virtual void load(CompoundTag* base); virtual void save(CompoundTag* base); virtual void setChanged(); virtual unsigned int getContainerSize(); virtual std::shared_ptr getItem(unsigned int slot); virtual std::shared_ptr removeItem(unsigned int slot, int count); virtual std::shared_ptr removeItemNoUpdate(int slot); virtual void setItem(unsigned int slot, std::shared_ptr item); virtual std::wstring getName(); virtual std::wstring getCustomName(); virtual bool hasCustomName(); virtual void setCustomName(const std::wstring& name); virtual int getMaxStackSize(); virtual bool stillValid(std::shared_ptr player); virtual void startOpen(); virtual void stopOpen(); virtual bool canPlaceItem(int slot, std::shared_ptr item); virtual void tick(); virtual bool tryMoveItems(); private: virtual bool ejectItems(); public: static bool suckInItems(Hopper* hopper); private: static bool tryTakeInItemFromSlot(Hopper* hopper, Container* container, int slot, int face); public: static bool addItem(Container* container, std::shared_ptr item); static std::shared_ptr addItem( Container* container, std::shared_ptr item, int face); private: static bool canPlaceItemInContainer(Container* container, std::shared_ptr item, int slot, int face); static bool canTakeItemFromContainer(Container* container, std::shared_ptr item, int slot, int face); static std::shared_ptr tryMoveInItem( Container* container, std::shared_ptr item, int slot, int face); virtual std::shared_ptr getAttachedContainer(); public: static std::shared_ptr getSourceContainer(Hopper* hopper); static std::shared_ptr getItemAt(Level* level, double xt, double yt, double zt); static std::shared_ptr getContainerAt(Level* level, double x, double y, double z); private: static bool canMergeItems(std::shared_ptr a, std::shared_ptr b); public: virtual Level* getLevel(); virtual double getLevelX(); virtual double getLevelY(); virtual double getLevelZ(); virtual void setCooldown(int time); virtual bool isOnCooldown(); };