8 Commits

15 changed files with 79 additions and 71 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
Diagnostics: Diagnostics:
Suppress: ["-Wmicrosoft-enum-forward-reference", "-Wc++11-narrowing", "-Wc++2b-extensions", "-Wmicrosoft-cast"] Suppress: ["-Wmicrosoft-enum-forward-reference", "-Wc++11-narrowing", "-Wc++2b-extensions", "-Wmicrosoft-cast"]
CompileFlags: CompileFlags:
Add: ["-ferror-limit=0", "-D__FUNCTION__=\"dummy\"", "-D_CRT_USE_BUILTIN_OFFSETOF", "-std:c++latest"] Add: ["-ferror-limit=0", "-D__FUNCTION__=\"dummy\"", "-D_CRT_USE_BUILTIN_OFFSETOF", "-std=c++23"]
Remove: ["/Yu_HeaderOutputPredefine.h", "/FI_HeaderOutputPredefine.h"] Remove: ["/Yu_HeaderOutputPredefine.h", "/FI_HeaderOutputPredefine.h"]
+2 -1
View File
@@ -15,7 +15,8 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: xmake-io/github-action-setup-xmake@v1 - uses: xmake-io/github-action-setup-xmake@v1
with:
xmake-version: latest
- run: | - run: |
xmake repo -u xmake repo -u
+2 -1
View File
@@ -15,7 +15,8 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: xmake-io/github-action-setup-xmake@v1 - uses: xmake-io/github-action-setup-xmake@v1
with:
xmake-version: latest
- run: | - run: |
xmake repo -u xmake repo -u
Submodule SDK-GMLIB deleted from fd8463224f
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "${pluginName}", "name": "${pluginName}",
"entry": "${pluginFile}", "entry": "${pluginFile}",
"type": "native", "type": "native",
"version": "0.12.2", "version": "0.13.0",
"author": "GroupMountain", "author": "GroupMountain",
"description": "Clean Entities", "description": "Clean Entities",
"dependencies": [ "dependencies": [
+3 -1
View File
@@ -3,7 +3,9 @@
#include <vector> #include <vector>
struct Config { struct Config {
int version = 1; int version = 2;
std::string language = "zh_CN";
struct basic { struct basic {
std::string Command = "cleaner"; std::string Command = "cleaner";
+15 -15
View File
@@ -15,35 +15,35 @@ void CleanTask() {
auto time_1 = std::chrono::seconds::duration(time); auto time_1 = std::chrono::seconds::duration(time);
auto time_2 = std::chrono::seconds::duration(time - announce_time); auto time_2 = std::chrono::seconds::duration(time - announce_time);
if (config.Basic.ConsoleLog) { if (config.Basic.ConsoleLog) {
logger.info(I18nAPI::get("cleaner.output.count1", {S(time_1.count())})); logger.info(tr("cleaner.output.count1", {S(time_1.count())}));
} }
if (config.Basic.SendBroadcast) { if (config.Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.output.count1", {S(time_1.count())})); Helper::broadcastMessage(tr("cleaner.output.count1", {S(time_1.count())}));
} }
if (config.Basic.SendToast) { if (config.Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.output.count2", {S(announce_time)})); Helper::broadcastToast(tr("cleaner.output.count2", {S(announce_time)}));
} }
Cleaner::Entry::getInstance().getScheduler().add<DelayTask>(time_2, [announce_time, &config] { Cleaner::Entry::getInstance().getScheduler().add<DelayTask>(time_2, [announce_time, &config] {
if (config.Basic.ConsoleLog) { if (config.Basic.ConsoleLog) {
logger.info(I18nAPI::get("cleaner.output.count2", {S(announce_time)})); logger.info(tr("cleaner.output.count2", {S(announce_time)}));
} }
if (config.Basic.SendBroadcast) { if (config.Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.output.count2", {S(announce_time)})); Helper::broadcastMessage(tr("cleaner.output.count2", {S(announce_time)}));
} }
if (config.Basic.SendToast) { if (config.Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.output.count2", {S(announce_time)})); Helper::broadcastToast(tr("cleaner.output.count2", {S(announce_time)}));
} }
}); });
Cleaner::Entry::getInstance().getScheduler().add<DelayTask>(time_1, [&config] { Cleaner::Entry::getInstance().getScheduler().add<DelayTask>(time_1, [&config] {
auto count = ExecuteClean(); auto count = ExecuteClean();
if (config.Basic.ConsoleLog) { if (config.Basic.ConsoleLog) {
logger.info(I18nAPI::get("cleaner.output.finish", {S(count)})); logger.info(tr("cleaner.output.finish", {S(count)}));
} }
if (config.Basic.SendBroadcast) { if (config.Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.output.finish", {S(count)})); Helper::broadcastMessage(tr("cleaner.output.finish", {S(count)}));
} }
if (config.Basic.SendToast) { if (config.Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.output.finish", {S(count)})); Helper::broadcastToast(tr("cleaner.output.finish", {S(count)}));
} }
auto_clean_triggerred = false; auto_clean_triggerred = false;
}); });
@@ -62,13 +62,13 @@ void CleanTaskCount(int max_entities) {
if (count >= max_entities) { if (count >= max_entities) {
auto_clean_triggerred = true; auto_clean_triggerred = true;
if (config.Basic.ConsoleLog) { if (config.Basic.ConsoleLog) {
logger.warn(I18nAPI::get("cleaner.output.triggerAutoCleanCount", {S(count)})); logger.warn(tr("cleaner.output.triggerAutoCleanCount", {S(count)}));
} }
if (config.Basic.SendBroadcast) { if (config.Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.output.triggerAutoCleanCount", {S(count)})); Helper::broadcastMessage(tr("cleaner.output.triggerAutoCleanCount", {S(count)}));
} }
if (config.Basic.SendToast) { if (config.Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.output.triggerAutoCleanCount", {S(count)})); Helper::broadcastToast(tr("cleaner.output.triggerAutoCleanCount", {S(count)}));
} }
CleanTask(); CleanTask();
} }
@@ -84,13 +84,13 @@ void CleanTaskTPS(float min_tps) {
auto_clean_triggerred = true; auto_clean_triggerred = true;
auto mspt = S(GMLIB_Level::getLevel()->getServerAverageTps()); auto mspt = S(GMLIB_Level::getLevel()->getServerAverageTps());
if (config.Basic.ConsoleLog) { if (config.Basic.ConsoleLog) {
logger.warn(I18nAPI::get("cleaner.output.triggerAutoCleanTps", {mspt})); logger.warn(tr("cleaner.output.triggerAutoCleanTps", {mspt}));
} }
if (config.Basic.SendBroadcast) { if (config.Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.output.triggerAutoCleanTps", {mspt})); Helper::broadcastMessage(tr("cleaner.output.triggerAutoCleanTps", {mspt}));
} }
if (config.Basic.SendToast) { if (config.Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.output.triggerAutoCleanTps", {mspt})); Helper::broadcastToast(tr("cleaner.output.triggerAutoCleanTps", {mspt}));
} }
CleanTask(); CleanTask();
} }
+2 -2
View File
@@ -3,11 +3,11 @@
namespace Helper { namespace Helper {
void broadcastMessage(std::string_view msg) { void broadcastMessage(std::string_view msg) {
GMLIB_Level::getInstance()->broadcast(I18nAPI::get("cleaner.info.prefix") + std::string(msg)); GMLIB_Level::getInstance()->broadcast(tr("cleaner.info.prefix") + std::string(msg));
} }
void broadcastToast(std::string_view msg) { void broadcastToast(std::string_view msg) {
GMLIB_Level::getInstance()->broadcastToast(I18nAPI::get("cleaner.info.prefix"), msg); GMLIB_Level::getInstance()->broadcastToast(tr("cleaner.info.prefix"), msg);
} }
} // namespace Helper } // namespace Helper
+20 -20
View File
@@ -24,10 +24,10 @@ int getPlayerCount() {
void sendVoteForm(Player* pl) { void sendVoteForm(Player* pl) {
auto fm = ll::form::ModalForm( auto fm = ll::form::ModalForm(
I18nAPI::get("cleaner.vote.title"), tr("cleaner.vote.title"),
I18nAPI::get("cleaner.vote.subtitle", {pl->getRealName()}), tr("cleaner.vote.subtitle", {pl->getRealName()}),
I18nAPI::get("cleaner.vote.ok"), tr("cleaner.vote.ok"),
I18nAPI::get("cleaner.vote.no") tr("cleaner.vote.no")
); );
ll::service::getLevel()->forEachPlayer([&](Player& pl) -> bool { ll::service::getLevel()->forEachPlayer([&](Player& pl) -> bool {
fm.sendTo(pl, [](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason reason) { fm.sendTo(pl, [](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason reason) {
@@ -35,12 +35,12 @@ void sendVoteForm(Player* pl) {
switch (result.value()) { switch (result.value()) {
case ll::form::ModalFormSelectedButton::Upper: { case ll::form::ModalFormSelectedButton::Upper: {
voteList[player.getUuid()] = true; voteList[player.getUuid()] = true;
player.sendMessage(I18nAPI::get("cleaner.vote.accept")); player.sendMessage(tr("cleaner.vote.accept"));
return; return;
} }
case ll::form::ModalFormSelectedButton::Lower: { case ll::form::ModalFormSelectedButton::Lower: {
voteList[player.getUuid()] = false; voteList[player.getUuid()] = false;
player.sendMessage(I18nAPI::get("cleaner.vote.deny")); player.sendMessage(tr("cleaner.vote.deny"));
return; return;
} }
default: default:
@@ -64,18 +64,18 @@ void checkVote() {
float result = ((float)voteCount) / ((float)playerCount); float result = ((float)voteCount) / ((float)playerCount);
if (result >= percentage) { if (result >= percentage) {
if (config.Basic.SendBroadcast) { if (config.Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.vote.succeed")); Helper::broadcastMessage(tr("cleaner.vote.succeed"));
} }
if (config.Basic.SendToast) { if (config.Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.vote.succeed")); Helper::broadcastToast(tr("cleaner.vote.succeed"));
} }
Cleaner::CleanTask(); Cleaner::CleanTask();
} else { } else {
if (config.Basic.SendBroadcast) { if (config.Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.vote.failed")); Helper::broadcastMessage(tr("cleaner.vote.failed"));
} }
if (config.Basic.SendToast) { if (config.Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.vote.failed")); Helper::broadcastToast(tr("cleaner.vote.failed"));
} }
} }
hasVote = false; hasVote = false;
@@ -89,10 +89,10 @@ void voteClean(Player* pl) {
hasVote = true; hasVote = true;
playerCount = getPlayerCount(); playerCount = getPlayerCount();
if (config.Basic.SendBroadcast) { if (config.Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.vote.voteMessage", {pl->getRealName()})); Helper::broadcastMessage(tr("cleaner.vote.voteMessage", {pl->getRealName()}));
} }
if (config.Basic.SendToast) { if (config.Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.vote.voteMessage", {pl->getRealName()})); Helper::broadcastToast(tr("cleaner.vote.voteMessage", {pl->getRealName()}));
} }
sendVoteForm(pl); sendVoteForm(pl);
auto cooldown = std::chrono::seconds::duration(config.VoteClean.Cooldown); auto cooldown = std::chrono::seconds::duration(config.VoteClean.Cooldown);
@@ -103,10 +103,10 @@ void voteClean(Player* pl) {
void confirmForm(Player* pl) { void confirmForm(Player* pl) {
auto fm = ll::form::ModalForm( auto fm = ll::form::ModalForm(
I18nAPI::get("cleaner.vote.title"), tr("cleaner.vote.title"),
I18nAPI::get("cleaner.vote.confirmTubtitle"), tr("cleaner.vote.confirmTubtitle"),
I18nAPI::get("cleaner.vote.confirmOk"), tr("cleaner.vote.confirmOk"),
I18nAPI::get("cleaner.vote.confirmNo") tr("cleaner.vote.confirmNo")
); );
fm.sendTo(*pl, [](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason reason) { fm.sendTo(*pl, [](Player& player, ll::form::ModalFormResult result, ll::form::FormCancelReason reason) {
if (result.has_value()) { if (result.has_value()) {
@@ -115,7 +115,7 @@ void confirmForm(Player* pl) {
return voteClean(&player); return voteClean(&player);
} }
case ll::form::ModalFormSelectedButton::Lower: { case ll::form::ModalFormSelectedButton::Lower: {
return player.sendMessage(I18nAPI::get("cleaner.vote.cancel")); return player.sendMessage(tr("cleaner.vote.cancel"));
} }
default: default:
return; return;
@@ -129,14 +129,14 @@ void voteCommandExecute(Player* pl) {
if (canVote) { if (canVote) {
confirmForm(pl); confirmForm(pl);
} else { } else {
pl->sendMessage(I18nAPI::get("cleaner.vote.cooldown")); pl->sendMessage(tr("cleaner.vote.cooldown"));
} }
} else { } else {
if (voteList.count(pl->getUuid())) { if (voteList.count(pl->getUuid())) {
pl->sendMessage(I18nAPI::get("cleaner.vote.voted")); pl->sendMessage(tr("cleaner.vote.voted"));
} else { } else {
voteList[pl->getUuid()] = true; voteList[pl->getUuid()] = true;
pl->sendMessage(I18nAPI::get("cleaner.vote.accept")); pl->sendMessage(tr("cleaner.vote.accept"));
} }
} }
} }
+3 -1
View File
@@ -12,4 +12,6 @@ extern void RegisterCommands();
namespace Helper { namespace Helper {
extern void broadcastMessage(std::string_view msg); extern void broadcastMessage(std::string_view msg);
extern void broadcastToast(std::string_view msg); extern void broadcastToast(std::string_view msg);
} // namespace Helper } // namespace Helper
extern std::string tr(std::string const& key, std::vector<std::string> const& params = {});
+5 -1
View File
@@ -44,4 +44,8 @@ ServerTimeScheduler& Entry::getScheduler() { return mScheduler.value(); }
} // namespace Cleaner } // namespace Cleaner
LL_REGISTER_PLUGIN(Cleaner::Entry, Cleaner::instance); LL_REGISTER_MOD(Cleaner::Entry, Cleaner::instance);
std::string tr(std::string const& key, std::vector<std::string> const& params) {
return I18nAPI::get(key, params, Cleaner::Entry::getInstance().getConfig().language);
}
+5 -5
View File
@@ -1,7 +1,7 @@
#pragma once #pragma once
#include "Config.h" #include "Config.h"
#include <ll/api/plugin/NativePlugin.h> #include <ll/api/mod/NativeMod.h>
#include <ll/api/schedule/Scheduler.h> #include <ll/api/schedule/Scheduler.h>
namespace Cleaner { namespace Cleaner {
@@ -13,9 +13,9 @@ class Entry {
public: public:
static Entry& getInstance(); static Entry& getInstance();
Entry(ll::plugin::NativePlugin& self) : mSelf(self) {} Entry(ll::mod::NativeMod& self) : mSelf(self) {}
[[nodiscard]] ll::plugin::NativePlugin& getSelf() const { return mSelf; } [[nodiscard]] ll::mod::NativeMod& getSelf() const { return mSelf; }
/// @return True if the plugin is loaded successfully. /// @return True if the plugin is loaded successfully.
bool load(); bool load();
@@ -37,9 +37,9 @@ public:
ServerTimeScheduler& getScheduler(); ServerTimeScheduler& getScheduler();
private: private:
ll::plugin::NativePlugin& mSelf; ll::mod::NativeMod& mSelf;
std::optional<Config> mConfig; std::optional<Config> mConfig;
std::optional<ServerTimeScheduler> mScheduler; std::optional<ServerTimeScheduler> mScheduler;
}; };
} // namespace Cleaner } // namespace Cleaner
+13 -13
View File
@@ -13,7 +13,7 @@ void RegCleanerCommand() {
auto& config = Cleaner::Entry::getInstance().getConfig(); auto& config = Cleaner::Entry::getInstance().getConfig();
auto& cmd = ll::command::CommandRegistrar::getInstance().getOrCreateCommand( auto& cmd = ll::command::CommandRegistrar::getInstance().getOrCreateCommand(
config.Basic.Command, config.Basic.Command,
I18nAPI::get("cleaner.command.cleaner"), tr("cleaner.command.cleaner"),
CommandPermissionLevel::GameDirectors CommandPermissionLevel::GameDirectors
); );
cmd.overload<CleanerParam>() cmd.overload<CleanerParam>()
@@ -22,12 +22,12 @@ void RegCleanerCommand() {
.execute<[&](CommandOrigin const& origin, CommandOutput& output, CleanerParam const& param) { .execute<[&](CommandOrigin const& origin, CommandOutput& output, CleanerParam const& param) {
auto ens = param.entity.results(origin); auto ens = param.entity.results(origin);
if (ens.empty()) { if (ens.empty()) {
return output.error(I18nAPI::get("cleaner.command.error.noTarget")); return output.error(tr("cleaner.command.error.noTarget"));
} }
for (auto en : ens) { for (auto en : ens) {
en->despawn(); en->despawn();
} }
return output.success(I18nAPI::get("cleaner.command.despawnSuccess", {S(ens.size())})); return output.success(tr("cleaner.command.despawnSuccess", {S(ens.size())}));
}>(); }>();
cmd.overload<CleanerParam>() cmd.overload<CleanerParam>()
.required("action") .required("action")
@@ -36,18 +36,18 @@ void RegCleanerCommand() {
case CleanerParam::Action::clean: { case CleanerParam::Action::clean: {
Cleaner::CleanTask(); Cleaner::CleanTask();
if (Cleaner::Entry::getInstance().getConfig().Basic.ConsoleLog) { if (Cleaner::Entry::getInstance().getConfig().Basic.ConsoleLog) {
logger.info(I18nAPI::get("cleaner.output.opClean")); logger.info(tr("cleaner.output.opClean"));
} }
if (Cleaner::Entry::getInstance().getConfig().Basic.SendBroadcast) { if (Cleaner::Entry::getInstance().getConfig().Basic.SendBroadcast) {
Helper::broadcastMessage(I18nAPI::get("cleaner.output.opClean")); Helper::broadcastMessage(tr("cleaner.output.opClean"));
} }
if (Cleaner::Entry::getInstance().getConfig().Basic.SendToast) { if (Cleaner::Entry::getInstance().getConfig().Basic.SendToast) {
Helper::broadcastToast(I18nAPI::get("cleaner.output.opClean")); Helper::broadcastToast(tr("cleaner.output.opClean"));
} }
return output.success(I18nAPI::get("cleaner.command.clean.output")); return output.success(tr("cleaner.command.clean.output"));
} }
case CleanerParam::Action::tps: { case CleanerParam::Action::tps: {
return output.success(I18nAPI::get( return output.success(tr(
"cleaner.command.tps.output", "cleaner.command.tps.output",
{S(GMLIB_Level::getLevel()->getServerCurrentTps()), {S(GMLIB_Level::getLevel()->getServerCurrentTps()),
S(GMLIB_Level::getLevel()->getServerAverageTps())} S(GMLIB_Level::getLevel()->getServerAverageTps())}
@@ -55,12 +55,12 @@ void RegCleanerCommand() {
} }
case CleanerParam::Action::mspt: { case CleanerParam::Action::mspt: {
return output.success( return output.success(
I18nAPI::get("cleaner.command.mspt.output", {S(GMLIB_Level::getLevel()->getServerMspt())}) tr("cleaner.command.mspt.output", {S(GMLIB_Level::getLevel()->getServerMspt())})
); );
} }
case CleanerParam::Action::reload: { case CleanerParam::Action::reload: {
Cleaner::reloadCleaner(); Cleaner::reloadCleaner();
return output.success(I18nAPI::get("cleaner.output.reload")); return output.success(tr("cleaner.output.reload"));
} }
} }
}>(); }>();
@@ -70,14 +70,14 @@ void RegCleanerCommand() {
.execute<[&](CommandOrigin const& origin, CommandOutput& output, CleanerParam const& param) { .execute<[&](CommandOrigin const& origin, CommandOutput& output, CleanerParam const& param) {
Cleaner::Entry::getInstance().getConfig().ItemDespawn.DespawnTime = param.ticks; Cleaner::Entry::getInstance().getConfig().ItemDespawn.DespawnTime = param.ticks;
Cleaner::Entry::getInstance().saveConfig(); Cleaner::Entry::getInstance().saveConfig();
return output.success(I18nAPI::get("cleaner.command.despawntime", {S(param.ticks)})); return output.success(tr("cleaner.command.despawntime", {S(param.ticks)}));
}>(); }>();
}; };
void RegVoteCommand() { void RegVoteCommand() {
auto& cmd = ll::command::CommandRegistrar::getInstance().getOrCreateCommand( auto& cmd = ll::command::CommandRegistrar::getInstance().getOrCreateCommand(
Cleaner::Entry::getInstance().getConfig().VoteClean.VoteCleanCommand, Cleaner::Entry::getInstance().getConfig().VoteClean.VoteCleanCommand,
I18nAPI::get("cleaner.command.voteclean"), tr("cleaner.command.voteclean"),
CommandPermissionLevel::Any CommandPermissionLevel::Any
); );
cmd.overload().execute<[&](CommandOrigin const& origin, CommandOutput& output) { cmd.overload().execute<[&](CommandOrigin const& origin, CommandOutput& output) {
@@ -85,7 +85,7 @@ void RegVoteCommand() {
auto pl = (Player*)origin.getEntity(); auto pl = (Player*)origin.getEntity();
return VoteClean::voteCommandExecute(pl); return VoteClean::voteCommandExecute(pl);
} }
return output.error(I18nAPI::get("cleaner.command.error.playerOnly")); return output.error(tr("cleaner.command.error.playerOnly"));
}>(); }>();
} }
+3 -3
View File
@@ -1,7 +1,7 @@
{ {
"format_version": 2, "format_version": 2,
"tooth": "github.com/GroupMountain/Cleaner", "tooth": "github.com/GroupMountain/Cleaner",
"version": "0.12.2", "version": "0.13.0",
"info": { "info": {
"name": "Cleaner", "name": "Cleaner",
"description": "A Powerful Entities Cleaning up Plugin for BDS", "description": "A Powerful Entities Cleaning up Plugin for BDS",
@@ -13,9 +13,9 @@
"gmlib" "gmlib"
] ]
}, },
"asset_url": "https://github.com/GroupMountain/Cleaner/releases/download/v0.12.2/Cleaner-windows-x64.zip", "asset_url": "https://github.com/GroupMountain/Cleaner/releases/download/v0.13.0/Cleaner-windows-x64.zip",
"dependencies": { "dependencies": {
"github.com/GroupMountain/GMLIB": ">=0.12.4" "github.com/GroupMountain/GMLIB": ">=0.13.0"
}, },
"files": { "files": {
"place": [ "place": [
+4 -5
View File
@@ -1,6 +1,7 @@
add_rules("mode.debug", "mode.release", "mode.releasedbg") add_rules("mode.debug", "mode.release", "mode.releasedbg")
add_repositories("liteldev-repo https://github.com/LiteLDev/xmake-repo.git") add_repositories("liteldev-repo https://github.com/LiteLDev/xmake-repo.git")
add_repositories("groupmountain-repo https://github.com/GroupMountain/xmake-repo.git")
if not has_config("vs_runtime") then if not has_config("vs_runtime") then
set_runtimes("MD") set_runtimes("MD")
@@ -8,6 +9,7 @@ end
-- Option 1: Use the latest version of LeviLamina released on GitHub. -- Option 1: Use the latest version of LeviLamina released on GitHub.
add_requires("levilamina") add_requires("levilamina")
add_requires("gmlib")
target("Cleaner") -- Change this to your plugin name. target("Cleaner") -- Change this to your plugin name.
add_cxflags( add_cxflags(
@@ -17,15 +19,12 @@ target("Cleaner") -- Change this to your plugin name.
add_files( add_files(
"src/**.cpp" "src/**.cpp"
) )
add_links(
"SDK-GMLIB/Lib/GMLIB"
)
add_includedirs( add_includedirs(
"SDK-GMLIB",
"src" "src"
) )
add_packages( add_packages(
"levilamina" "levilamina",
"gmlib"
) )
add_shflags( add_shflags(
"/DELAYLOAD:bedrock_server.dll" "/DELAYLOAD:bedrock_server.dll"