#pragma once using namespace std; #include "HashExtension.h" #include "..\Minecraft.World\JavaIntHash.h" class Level; class Packet; class CompoundTag; typedef TileEntity *(*tileEntityCreateFn)(); class TileEntity : public enable_shared_from_this { public: static void staticCtor(); virtual eINSTANCEOF GetType() { return eTYPE_TILEENTITY; } private: typedef unordered_map idToCreateMapType; typedef unordered_map classToIdMapType; static idToCreateMapType idCreateMap; static classToIdMapType classIdMap; static void setId(tileEntityCreateFn createFn, eINSTANCEOF clas, wstring id); bool remove; unsigned char renderRemoveStage; // 4J added public: Level *level; int x, y, z; // 4J added enum RenderRemoveStage { e_RenderRemoveStageKeep, e_RenderRemoveStageFlaggedAtChunk, e_RenderRemoveStageRemove }; int data; Tile *tile; public: // 4J Java does not have a ctor, but we need one to do some initialisation of the member variables TileEntity(); virtual ~TileEntity() {} void setRenderRemoveStage(unsigned char stage); // 4J added void upgradeRenderRemoveStage(); // 4J added bool shouldRemoveForRender(); // 4J added Level *getLevel(); void setLevel(Level *level); bool hasLevel(); virtual void load(CompoundTag *tag); virtual void save(CompoundTag *tag); virtual void tick(); static shared_ptr loadStatic(CompoundTag *tag); int getData(); void setData(int data); void setChanged(); double distanceToSqr(double xPlayer, double yPlayer, double zPlayer); Tile *getTile(); virtual shared_ptr getUpdatePacket(); virtual bool isRemoved(); virtual void setRemoved(); virtual void clearRemoved(); virtual void triggerEvent(int b0, int b1); virtual void clearCache(); // 4J Added virtual shared_ptr clone() = 0; protected: void clone(shared_ptr tileEntity); };