mirror of
https://github.com/quizhizhe/LiteLoaderBDS-1.16.40.git
synced 2025-06-06 12:03:39 +00:00
30 lines
1.1 KiB
C++
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>){};
|
|
}; |