#pragma once using namespace std; #include "Entity.h" #include "JavaIntHash.h" class Level; class CompoundTag; typedef Entity *(*entityCreateFn)(Level *); class EntityIO { public: class SpawnableMobInfo { public: int id; eMinecraftColour eggColor1; eMinecraftColour eggColor2; int nameId; // 4J Added SpawnableMobInfo(int id, eMinecraftColour eggColor1, eMinecraftColour eggColor2, int nameId) { this->id = id; this->eggColor1 = eggColor1; this->eggColor2 = eggColor2; this->nameId = nameId; } }; private: static unordered_map *idCreateMap; static unordered_map *classIdMap; static unordered_map *numCreateMap; static unordered_map *numClassMap; static unordered_map *classNumMap; static unordered_map *idNumMap; public: static unordered_map idsSpawnableInCreative; private: static void setId(entityCreateFn createFn, eINSTANCEOF clas, const wstring &id, int idNum); static void setId(entityCreateFn createFn, eINSTANCEOF clas, const wstring &id, int idNum, eMinecraftColour color1, eMinecraftColour color2, int nameId); public: static void staticCtor(); static shared_ptr newEntity(const wstring& id, Level *level); static shared_ptr loadStatic(CompoundTag *tag, Level *level); static shared_ptr newById(int id, Level *level); static shared_ptr newByEnumType(eINSTANCEOF eType, Level *level); static int getId(shared_ptr entity); static wstring getEncodeId(shared_ptr entity); static int getId(const wstring &encodeId); static wstring getEncodeId(int entityIoValue); static int getNameId(int entityIoValue); static eINSTANCEOF getType(const wstring &idString); static eINSTANCEOF getClass(int id); // 4J-JEV, added for enumerating mobs. static int eTypeToIoid(eINSTANCEOF eType); };