// This Header is auto generated by BDSLiteLoader Toolchain
#pragma once
#define AUTO_GENERATED
#include "llapi/Global.h"
#include "Core.hpp"
#include "Json.hpp"

#define BEFORE_EXTRA
#include "ActorDefinition.hpp"
#include "ResourcePackManager.hpp"
#include "ActorDefinitionPtr.hpp"
#include "ActorComponentFactory.hpp"
#undef BEFORE_EXTRA

class ActorEventResponseFactory {
public:
    class ActorEventResponseFactory& operator=(class ActorEventResponseFactory const &) = delete;
    ActorEventResponseFactory(class ActorEventResponseFactory const &) = delete;
    ActorEventResponseFactory() = delete;
};

class ActorDefinitionGroup {

#define AFTER_EXTRA
public:
    struct LoadActorResult;
    struct EDLWrapper {
        std::unordered_map<std::string, std::unique_ptr<ActorDefinition>> mList;
    };

public:
    void** __vftable /*VFT*/;
    std::unordered_set<ActorDefinitionPtr*> mRegisteredPtrs;
    std::unordered_map<std::string, std::unique_ptr<ActorDefinition>> mDefinitions;
    std::unordered_map<std::string, ActorDefinitionGroup::EDLWrapper> mTemplateMap;
    ResourcePackManager* mResourcePackManager;
    std::mutex mReferenceMutex;
    IMinecraftEventing* mEventing;
    ActorComponentFactory* mComponentFactory;
    std::unique_ptr<ActorEventResponseFactory> mResponseFactory;
#undef AFTER_EXTRA
#ifndef DISABLE_CONSTRUCTOR_PREVENTION_ACTORDEFINITIONGROUP
public:
    class ActorDefinitionGroup& operator=(class ActorDefinitionGroup const &) = delete;
    ActorDefinitionGroup(class ActorDefinitionGroup const &) = delete;
    ActorDefinitionGroup() = delete;
#endif

public:
#ifdef ENABLE_VIRTUAL_FAKESYMBOL_ACTORDEFINITIONGROUP
#endif
    MCAPI class ActorDefinitionPtr tryGetDefinition(std::string const &);
    MCAPI class ActorDefinitionPtr tryGetDefinitionGroup(std::string const &, std::string const &);
    MCAPI static bool loadActorDefinitionIdentifier(class Json::Value const &, class SemVersion const &, std::string &);
    MCAPI static bool loadActorDefinitionRuntimeIdentifier(class Json::Value const &, class SemVersion const &, std::string &);
    MCAPI static bool tryReadEntityResourceFile(class PackInstance &, class Core::Path const &, class Json::Value &);

//protected:
    MCAPI void _addRef(class ActorDefinitionPtr &);
    MCAPI void _removeRef(class ActorDefinitionPtr &);

//private:
    MCAPI void _getResources(class Level &);
    MCAPI struct ActorDefinitionGroup::LoadActorResult _loadActorDefinition(class Level &, class Json::Value &, class std::unordered_set<std::string, struct std::hash<std::string>, struct std::equal_to<std::string>, class std::allocator<std::string>> &);
    MCAPI bool _loadDefinitionFromJSON(class SemVersion &, class Json::Value &, std::string const &, class Level &);
    MCAPI void _loadTemplates(class Level &, std::string const &, class Json::Value, class SemVersion const &);
    MCAPI void _setupAnimationResourceDefinitionMap(class ActorDefinition &, class Level &);

protected:

private:

};