#pragma once #include "MinecartContainer.h" #include "../Blocks/TileEntities/Hopper.h" class MinecartHopper : public MinecartContainer, public Hopper { public: eINSTANCEOF GetType() { return eTYPE_MINECART_HOPPER; }; static Entity* create(Level* level) { return new MinecartHopper(level); } public: static const int MOVE_ITEM_SPEED; private: bool enabled; int cooldownTime; void _init(); public: MinecartHopper(Level* level); MinecartHopper(Level* level, double x, double y, double z); virtual int getType(); virtual Tile* getDefaultDisplayTile(); virtual int getDefaultDisplayOffset(); virtual unsigned int getContainerSize(); virtual bool interact(std::shared_ptr player); virtual void activateMinecart(int xt, int yt, int zt, bool state); virtual bool isEnabled(); virtual void setEnabled(bool enabled); virtual Level* getLevel(); virtual double getLevelX(); virtual double getLevelY(); virtual double getLevelZ(); virtual void tick(); virtual bool suckInItems(); virtual void destroy(DamageSource* source); protected: virtual void addAdditonalSaveData(CompoundTag* base); virtual void readAdditionalSaveData(CompoundTag* base); public: void setCooldown(int time); bool isOnCooldown(); // 4J For Hopper virtual std::shared_ptr getItem(unsigned int slot) { return MinecartContainer::getItem(slot); } virtual std::shared_ptr removeItem(unsigned int slot, int count) { return MinecartContainer::removeItem(slot, count); } virtual std::shared_ptr removeItemNoUpdate(int slot) { return MinecartContainer::removeItemNoUpdate(slot); } virtual void setItem(unsigned int slot, std::shared_ptr item) { MinecartContainer::setItem(slot, item); } virtual std::wstring getName() { return MinecartContainer::getName(); } virtual std::wstring getCustomName() { return MinecartContainer::getCustomName(); } virtual bool hasCustomName() { return MinecartContainer::hasCustomName(); } virtual int getMaxStackSize() { return MinecartContainer::getMaxStackSize(); } virtual void setChanged() { MinecartContainer::setChanged(); } virtual bool stillValid(std::shared_ptr player) { return MinecartContainer::stillValid(player); } virtual void startOpen() { MinecartContainer::startOpen(); } virtual void stopOpen() { MinecartContainer::stopOpen(); } virtual bool canPlaceItem(int slot, std::shared_ptr item) { return MinecartContainer::canPlaceItem(slot, item); } };