diff --git a/manifest.json b/manifest.json index 6dd4a67..f7d4713 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { - "name": "${pluginName}", - "entry": "${pluginFile}", - "version": "1.1.2", + "name": "${modName}", + "entry": "${modFile}", + "version": "${modVersion}", "author": "GroupMountain", "type": "native", "passive": true, diff --git a/scripts/after_build.lua b/scripts/after_build.lua deleted file mode 100644 index d3fc616..0000000 --- a/scripts/after_build.lua +++ /dev/null @@ -1,121 +0,0 @@ -function beautify_json(value, indent) - import("core.base.json") - local json_text = "" - local stack = {} - - local function escape_str(s) - return string.gsub(s, '[%c\\"]', function(c) - local replacements = {['\b'] = '\\b', ['\f'] = '\\f', ['\n'] = '\\n', ['\r'] = '\\r', ['\t'] = '\\t', ['"'] = '\\"', ['\\'] = '\\\\'} - return replacements[c] or string.format('\\u%04x', c:byte()) - end) - end - - local function is_null(v) - return v == json.null - end - - local function is_empty_table(t) - if type(t) ~= 'table' then return false end - for _ in pairs(t) do - return false - end - return true - end - - local function is_array(t) - return type(t) == 'table' and json.is_marked_as_array(t) or #t > 0 - end - - local function serialize(val, level) - local spaces = string.rep(" ", level * indent) - - if type(val) == "table" and not stack[val] then - if is_empty_table(val) then - json_text = json_text .. (is_array(val) and "[]" or "{}") - return - end - - stack[val] = true - local isArray = is_array(val) - json_text = json_text .. (isArray and "[\n" or "{\n") - - local keys = isArray and {} or {} - for k in pairs(val) do - table.insert(keys, k) - end - if not isArray then - table.sort(keys) - end - - for _, k in ipairs(keys) do - local v = val[k] - json_text = json_text .. spaces .. (isArray and "" or '"' .. escape_str(tostring(k)) .. '": ') - serialize(v, level + 1) - json_text = json_text .. ",\n" - end - - json_text = string.sub(json_text, 1, -3) .. "\n" .. string.rep(" ", (level - 1) * indent) .. (isArray and "]" or "}") - stack[val] = nil - elseif type(val) == "string" then - json_text = json_text .. '"' .. escape_str(val) .. '"' - elseif type(val) == "number" then - if val % 1 == 0 then - json_text = json_text .. tostring(math.floor(val)) - else - json_text = json_text .. tostring(val) - end - elseif type(val) == "boolean" then - json_text = json_text .. tostring(val) - elseif is_null(val) then - json_text = json_text .. "null" - else - error("Invalid value type: " .. type(val)) - end - end - serialize(value, 1) - return json_text -end - -function string_formatter(str, variables) - return str:gsub("%${(.-)}", function(var) - return variables[var] or "${" .. var .. "}" - end) -end - -function pack_plugin(target,plugin_define) - import("lib.detect.find_file") - - local manifest_path = find_file("manifest.json", os.projectdir()) - if manifest_path then - local manifest = io.readfile(manifest_path) - local bindir = path.join(os.projectdir(), "bin/DLL") - local pdbdir = path.join(os.projectdir(), "bin/PDB") - local outputdir = path.join(bindir, plugin_define.pluginName) - local targetfile = path.join(outputdir, plugin_define.pluginFile) - local pdbfile = path.join(pdbdir, path.basename(plugin_define.pluginFile) .. ".pdb") - local libfile = path.join(os.projectdir(), "lib") - local manifestfile = path.join(outputdir, "manifest.json") - local oritargetfile = target:targetfile() - local oripdbfile = path.join(path.directory(oritargetfile), path.basename(oritargetfile) .. ".pdb") - - os.mkdir(outputdir) - os.cp(oritargetfile, targetfile) - if os.isfile(oripdbfile) then - os.cp(oripdbfile, pdbfile) - end - os.cp(libfile, outputdir) - - formattedmanifest = string_formatter(manifest, plugin_define) - io.writefile(manifestfile,formattedmanifest) - cprint("${bright green}[Plugin Packer]: ${reset}plugin already generated to " .. outputdir) - else - cprint("${bright yellow}warn: ${reset}not found manifest.json in root dir!") - end -end - - -return { - pack_plugin = pack_plugin, - beautify_json = beautify_json, - string_formatter = string_formatter -} diff --git a/src/BinaryStreamApi.cpp b/src/BinaryStreamApi.cpp index 28d60f4..ebbfd05 100644 --- a/src/BinaryStreamApi.cpp +++ b/src/BinaryStreamApi.cpp @@ -78,6 +78,7 @@ void Export_BinaryStream_API() { EXPORTAPI("writeItem", ItemStack*, bs->writeNetworkItemStackDescriptor(NetworkItemStackDescriptor(*value))); EXPORTAPI("writeString", std::string const&, bs->writeString(value)); EXPORTAPI("writeCompoundTag", CompoundTag*, bs->writeCompoundTag(*value)); + EXPORTAPI("writeUnsignedChar", uchar, bs->writeUnsignedChar(value)); EXPORTAPI2(writeBool); EXPORTAPI2(writeByte); EXPORTAPI2(writeDouble); @@ -86,7 +87,6 @@ void Export_BinaryStream_API() { EXPORTAPI2(writeSignedInt); EXPORTAPI2(writeSignedInt64); EXPORTAPI2(writeSignedShort); - EXPORTAPI2(writeUnsignedChar); EXPORTAPI2(writeUnsignedInt); EXPORTAPI2(writeUnsignedInt64); EXPORTAPI2(writeUnsignedShort); diff --git a/src/CompatibilityApi.cpp b/src/CompatibilityApi.cpp index 452b893..7829665 100644 --- a/src/CompatibilityApi.cpp +++ b/src/CompatibilityApi.cpp @@ -492,6 +492,7 @@ void Export_Compatibility_API() { if (auto uce = UserCache::getInstance()->from(mce::UUID::fromString(uuid))) { return uce->mName; } + return ""; }); RemoteCall::exportAs("GMLIB_API", "getNameByXuid", [](std::string const& xuid) -> std::string { if (auto uce = UserCache::getInstance()->from(xuid, UserCache::QueryType::Xuid)) { diff --git a/src/Entry.cpp b/src/Entry.cpp index 7982661..6b4576c 100644 --- a/src/Entry.cpp +++ b/src/Entry.cpp @@ -22,7 +22,7 @@ bool LegacyRemoteCallApi::load() { logger->info( "Loaded Version: {} with {}", fmt::format(fg(fmt::color::pink), "GMLIB-" GMLIB_FILE_VERSION_STRING), - fmt::format(fg(fmt::color::light_green), "GMLIB-LegacyRemoteCallApi-" + LIB_VERSION.to_string()) + fmt::format(fg(fmt::color::light_green), "GMLIB-LegacyRemoteCallApi-{}", LIB_VERSION.to_string()) ); logger->info("Author: GroupMountain"); logger->info("Repository: https://github.com/GroupMountain/GMLIB-LegacyRemoteCallApi"); diff --git a/src/EventAPI.cpp b/src/EventAPI.cpp index a15a52a..28b5ec3 100644 --- a/src/EventAPI.cpp +++ b/src/EventAPI.cpp @@ -162,12 +162,10 @@ void Export_Event_API() { ); } case doHash("gmlib::PlayerStartSleepBeforeEvent"): { - REGISTER_EVENT_LISTEN( - ila::mc::PlayerStartSleepBeforeEvent, - (Player * entity, BlockPos pos, bool isCancelled), - (&event.self(), event.pos(), event.isCancelled()), - event.setCancelled(result); - ); + REGISTER_EVENT_LISTEN(ila::mc::PlayerStartSleepBeforeEvent, + (Player * entity, BlockPos pos, bool isCancelled), + (&event.self(), event.pos(), event.isCancelled()), + event.setCancelled(result);); } case doHash("gmlib::PlayerStartSleepAfterEvent"): { REGISTER_EVENT_LISTEN( @@ -182,7 +180,7 @@ void Export_Event_API() { ila::mc::PlayerStopSleepBeforeEvent, (Player * entity, bool forcefulWakeUp, bool updateLevelList, bool isCancelled), (&event.self(), event.forcefulWakeUp(), event.updateLevelList(), false), - + ); } case doHash("gmlib::PlayerStopSleepAfterEvent"): { @@ -251,43 +249,36 @@ void Export_Event_API() { ({event.pos(), event.blockSource().getDimensionId()}, event.isCancelled()), event.setCancelled(result);); } - case doHash("gmlib::SpawnWanderingTraderAfterEvent"): { - REGISTER_EVENT_LISTEN( - ila::mc::SpawnWanderingTraderAfterEvent, - (std::pair pos), - ({event.pos(), event.blockSource().getDimensionId()}), - ); + case doHash("gmlib::HandleRequestActionBeforeEvent"): { + // clang-format off + REGISTER_EVENT_LISTEN( + ila::mc::PlayerRequestItemActionBeforeEvent, + ( + Player * player, + std::string const& actionType, + int count, + std::string const& sourceContainerNetId, + int sourceSlot, + std::string const& destinationContainerNetId, + int destinationSlot, + bool isCancelled + ), + ( + (Player*)&event.self(), + magic_enum::enum_name(event.actionType()).data(), + event.amount(), + magic_enum::enum_name(event.src().mFullContainerName.mName).data(), + (int)event.src().mSlot, + magic_enum::enum_name(event.dst().mFullContainerName.mName).data(), + (int)event.dst().mSlot, + event.isCancelled() + ), + event.setCancelled(result);, + ); + // clang-format on } - case doHash("gmlib::HandleRequestActionBeforeEvent"): { - // clang-format off - REGISTER_EVENT_LISTEN( - ila::mc::PlayerRequestItemActionBeforeEvent, - ( - Player * player, - std::string const& actionType, - int count, - std::string const& sourceContainerNetId, - int sourceSlot, - std::string const& destinationContainerNetId, - int destinationSlot, - bool isCancelled - ), - ( - (Player*)&event.self(), - magic_enum::enum_name(event.actionType()).data(), - event.amount(), - magic_enum::enum_name(event.src().mFullContainerName.mName).data(), - (int)event.src().mSlot, - magic_enum::enum_name(event.dst().mFullContainerName.mName).data(), - (int)event.dst().mSlot, - event.isCancelled() - ), - event.setCancelled(result);, - ); - // clang-format on - } - case doHash("gmlib::HandleRequestActionAfterEvent"): { - // clang-format off + case doHash("gmlib::HandleRequestActionAfterEvent"): { + // clang-format off REGISTER_EVENT_LISTEN( ila::mc::PlayerRequestItemActionAfterEvent, ( @@ -310,18 +301,18 @@ void Export_Event_API() { ), , ); - // clang-format on - } - case doHash("gmlib::ContainerClosePacketSendAfterEvent"): { - REGISTER_EVENT_LISTEN( - ila::mc::PlayerCloseContainerAfterEvent, - (Player * player, int containerId, bool serverInitiatedClose, bool), - (&event.self(), (int)event.containerId(), event.serverInitiatedClose(), false), - , - ); - } - } - return -1; + // clang-format on + } + case doHash("gmlib::ContainerClosePacketSendAfterEvent"): { + REGISTER_EVENT_LISTEN( + ila::mc::PlayerCloseContainerAfterEvent, + (Player * player, int containerId, bool serverInitiatedClose, bool), + (&event.self(), (int)event.containerId(), event.serverInitiatedClose(), false), + , + ); + } + } + return -1; } ); } \ No newline at end of file diff --git a/tooth.json b/tooth.json index 81ace80..e63aae6 100644 --- a/tooth.json +++ b/tooth.json @@ -2,7 +2,7 @@ "format_version": 3, "format_uuid": "289f771f-2c9a-4d73-9f3f-8492495a924d", "tooth": "github.com/GroupMountain/GMLIB-LegacyRemoteCallApi", - "version": "1.1.2", + "version": "1.2.0", "info": { "name": "GMLIB-LegacyRemoteCallApi", "description": "Legacy RemoteCall API for GMLIB", @@ -19,15 +19,15 @@ { "platform": "win-x64", "dependencies": { - "github.com/LiteLDev/LeviLamina": ">=1.2.0", - "github.com/GroupMountain/GMLIB-Release": ">=1.2.0-rc.1", - "github.com/MiracleForest/iListenAttentively-Release": ">=0.5.0-rc.1" + "github.com/LiteLDev/LeviLamina": ">=1.3.0", + "github.com/GroupMountain/GMLIB-Release": ">=1.3.0-rc.1", + "github.com/MiracleForest/iListenAttentively-Release": ">=0.6.0" }, "assets": [ { "type": "zip", "urls": [ - "https://github.com/GroupMountain/GMLIB-LegacyRemoteCallApi/releases/download/v$(version)/GMLIB-LegacyRemoteCallApi-windows-x64.zip" + "https://{{tooth}}/releases/download/v{{version}}/GMLIB-LegacyRemoteCallApi-windows-x64.zip" ], "placements": [ { diff --git a/xmake.lua b/xmake.lua index ee1cdfa..92d4ff5 100644 --- a/xmake.lua +++ b/xmake.lua @@ -8,11 +8,11 @@ if not has_config("vs_runtime") then set_runtimes("MD") end -add_requires("levilamina 1.2.0", {configs = {target_type = "server"}}) +add_requires("levilamina 1.3.0", {configs = {target_type = "server"}}) add_requires("legacyremotecall") add_requires("levibuildscript") -add_requires("ilistenattentively 0.5.0-rc.1") -add_requires("gmlib 1.2.0-rc.1") +add_requires("ilistenattentively 0.6.0") +add_requires("gmlib 1.3.0-rc.1") target("GMLIB-LegacyRemoteCallApi") add_cxflags( @@ -38,18 +38,15 @@ target("GMLIB-LegacyRemoteCallApi") "gmlib" ) add_rules("@levibuildscript/linkrule") + add_rules("@levibuildscript/modpacker") set_exceptions("none") set_kind("shared") set_languages("cxx20") set_symbols("debug") - after_build(function (target) - local plugin_packer = import("scripts.after_build") - - local plugin_define = { - pluginName = target:name(), - pluginFile = path.filename(target:targetfile()), - } - - plugin_packer.pack_plugin(target,plugin_define) - end) + local target_path = path.join("bin", target:name(), "lib") + if os.exists(target_path) then + os.rm(target_path) + end + os.cp("lib", target_path) + end) \ No newline at end of file