LiteLoaderBDS-1.16.40/LiteLoader/include/llapi/mc/CommandSelector.hpp
2023-03-03 10:18:21 -08:00

30 lines
1.1 KiB
C++

#pragma once
#include "CommandSelectorBase.hpp"
// static_assert(offsetof(CommandSelectorBase, explicitIdSelector) == 165);
template <typename T>
class CommandSelector : public CommandSelectorBase {
public:
LIAPI CommandSelector() : CommandSelectorBase(std::is_same_v<T, Player>) {}
inline CommandSelectorResults<T> results(CommandOrigin const& a0) const
{
CommandSelectorResults<T> (CommandSelector<T>::*rv)(CommandOrigin const& a0) const;
if constexpr (std::is_same_v<class Actor, T>) {
*((void**)&rv) = dlsym("?results@?$CommandSelector@VActor@@@@QEBA?AV?$CommandSelectorResults@VActor@@@@AEBVCommandOrigin@@@Z");
return (this->*rv)(a0);
}
else {
*((void**)&rv) = dlsym("?results@?$CommandSelector@VPlayer@@@@QEBA?AV?$CommandSelectorResults@VPlayer@@@@AEBVCommandOrigin@@@Z");
return (this->*rv)(a0);
}
}
};
template <typename T>
class WildcardCommandSelector : public CommandSelectorBase
{
public:
WildcardCommandSelector()
: CommandSelectorBase(std::is_same_v<T, Player>){};
};