#include #include #include #include int Biome::getId() const { return dAccess(this); } std::string const& Biome::getName() const { return dAccess(this); } // Biome* Biome::fromId(int id) { // auto& reg = Global->getBiomeRegistry(); // return reg.lookupById(id); // } Biome* Biome::fromName(std::string const& name) { auto& reg = Global->getBiomeRegistry(); return reg.lookupByName(name); } std::vector Biome::getBiomesByType(VanillaBiomeTypes type) { std::vector result; auto& reg = Global->getBiomeRegistry(); reg.forEachBiome([&](Biome& biome) { if (biome.getBiomeType() == type) result.push_back(&biome); }); return result; } #ifdef DEBUG #include #include extern Logger logger; TClasslessInstanceHook2("startServerThread_TestBiome", void, "?startServerThread@ServerInstance@@QEAAXXZ") { Global = Global->getLevel(); auto& reg = Global->getBiomeRegistry(); assert(reg.isRegistrationFinished()); reg.forEachBiome([](class Biome& bio) { logger.warn("id: {}, name: {}, typeId: {}", bio.getId(), bio.getName(), (int)bio.getBiomeType()); assert(&bio == Biome::fromId(bio.getId())); assert(&bio == Biome::fromName(bio.getName())); }); for (size_t i = 0; i < 20; i++) { auto biomes = Biome::getBiomesByType((VanillaBiomeTypes)i); std::string biomesInfo = ""; for (auto biome : biomes) biomesInfo += biome->getName() + ", "; logger.warn("type: {}, biomes: {}", i, biomesInfo); } std::vector bimes = dAccess>(®, 126 * 8); __debugbreak(); return original(this); } #endif // DEBUG