#pragma once #include "BaseEntityTile.h" #include "../Headers/net.minecraft.core.h" class Player; class Mob; class ChunkRebuildData; class DispenserTile : public BaseEntityTile { friend class Tile; friend class ChunkRebuildData; public: static const int FACING_MASK = 0x7; static const int TRIGGER_BIT = 8; static BehaviorRegistry REGISTRY; protected: Random* random; Icon* iconTop; Icon* iconFront; Icon* iconFrontVertical; protected: DispenserTile(int id); public: virtual int getTickDelay(Level* level); virtual void onPlace(Level* level, int x, int y, int z); private: void recalcLockDir(Level* level, int x, int y, int z); public: virtual Icon* getTexture(int face, int data); virtual void registerIcons(IconRegister* iconRegister); virtual bool TestUse(); virtual bool use(Level* level, int x, int y, int z, std::shared_ptr player, int clickedFace, float clickX, float clickY, float clickZ, bool soundOnly = false); // 4J added soundOnly param protected: virtual void dispenseFrom(Level* level, int x, int y, int z); virtual DispenseItemBehavior* getDispenseMethod( std::shared_ptr item); public: virtual void neighborChanged(Level* level, int x, int y, int z, int type); virtual void tick(Level* level, int x, int y, int z, Random* random); virtual std::shared_ptr newTileEntity(Level* level); virtual void setPlacedBy(Level* level, int x, int y, int z, std::shared_ptr by, std::shared_ptr itemInstance); virtual void onRemove(Level* level, int x, int y, int z, int id, int data); static Position* getDispensePosition(BlockSource* source); static FacingEnum* getFacing(int data); virtual bool hasAnalogOutputSignal(); virtual int getAnalogOutputSignal(Level* level, int x, int y, int z, int dir); };