Initial commit
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
BasedOnStyle: LLVM
|
||||||
|
AccessModifierOffset: -4
|
||||||
|
AlignAfterOpenBracket: BlockIndent
|
||||||
|
AlignArrayOfStructures: Left
|
||||||
|
AlignConsecutiveDeclarations:
|
||||||
|
Enabled: true
|
||||||
|
AcrossEmptyLines: false
|
||||||
|
AcrossComments: false
|
||||||
|
AlignConsecutiveAssignments:
|
||||||
|
Enabled: true
|
||||||
|
AcrossEmptyLines: false
|
||||||
|
AcrossComments: false
|
||||||
|
AlignCompound: true
|
||||||
|
PadOperators: true
|
||||||
|
AlignConsecutiveMacros:
|
||||||
|
Enabled: true
|
||||||
|
AcrossEmptyLines: false
|
||||||
|
AcrossComments: false
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
|
AllowAllArgumentsOnNextLine: false
|
||||||
|
AlignOperands: AlignAfterOperator
|
||||||
|
AlignConsecutiveBitFields:
|
||||||
|
Enabled: true
|
||||||
|
AcrossEmptyLines: false
|
||||||
|
AcrossComments: false
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortBlocksOnASingleLine: Empty
|
||||||
|
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
|
||||||
|
AllowShortLoopsOnASingleLine: true
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakTemplateDeclarations: 'Yes'
|
||||||
|
BinPackArguments: false
|
||||||
|
BinPackParameters: false
|
||||||
|
BreakBeforeBraces: Custom
|
||||||
|
BreakBeforeBinaryOperators: NonAssignment
|
||||||
|
ColumnLimit: 120
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
ConstructorInitializerIndentWidth: 0
|
||||||
|
IndentWidth: 4
|
||||||
|
Language: Cpp
|
||||||
|
MaxEmptyLinesToKeep: 2
|
||||||
|
PackConstructorInitializers: CurrentLine
|
||||||
|
PointerAlignment: Left
|
||||||
|
TabWidth: 4
|
||||||
|
UseTab: Never
|
||||||
|
SortIncludes: CaseSensitive
|
||||||
+144
@@ -0,0 +1,144 @@
|
|||||||
|
---
|
||||||
|
Checks: '-*,
|
||||||
|
bugprone-argument-comment,
|
||||||
|
bugprone-assert-side-effect,
|
||||||
|
bugprone-bad-signal-to-kill-thread,
|
||||||
|
bugprone-branch-clone,
|
||||||
|
bugprone-copy-constructor-init,
|
||||||
|
bugprone-dangling-handle,
|
||||||
|
bugprone-dynamic-static-initializers,
|
||||||
|
bugprone-fold-init-type,
|
||||||
|
bugprone-forward-declaration-namespace,
|
||||||
|
bugprone-forwarding-reference-overload,
|
||||||
|
bugprone-inaccurate-erase,
|
||||||
|
bugprone-incorrect-roundings,
|
||||||
|
bugprone-integer-division,
|
||||||
|
bugprone-lambda-function-name,
|
||||||
|
bugprone-macro-parentheses,
|
||||||
|
bugprone-macro-repeated-side-effects,
|
||||||
|
bugprone-misplaced-operator-in-strlen-in-alloc,
|
||||||
|
bugprone-misplaced-pointer-arithmetic-in-alloc,
|
||||||
|
bugprone-misplaced-widening-cast,
|
||||||
|
bugprone-move-forwarding-reference,
|
||||||
|
bugprone-multiple-statement-macro,
|
||||||
|
bugprone-no-escape,
|
||||||
|
bugprone-not-null-terminated-result,
|
||||||
|
bugprone-parent-virtual-call,
|
||||||
|
bugprone-posix-return,
|
||||||
|
bugprone-reserved-identifier,
|
||||||
|
bugprone-sizeof-container,
|
||||||
|
bugprone-sizeof-expression,
|
||||||
|
bugprone-spuriously-wake-up-functions,
|
||||||
|
bugprone-string-constructor,
|
||||||
|
bugprone-string-integer-assignment,
|
||||||
|
bugprone-string-literal-with-embedded-nul,
|
||||||
|
bugprone-suspicious-enum-usage,
|
||||||
|
bugprone-suspicious-include,
|
||||||
|
bugprone-suspicious-memory-comparison,
|
||||||
|
bugprone-suspicious-memset-usage,
|
||||||
|
bugprone-suspicious-missing-comma,
|
||||||
|
bugprone-suspicious-semicolon,
|
||||||
|
bugprone-suspicious-string-compare,
|
||||||
|
bugprone-swapped-arguments,
|
||||||
|
bugprone-terminating-continue,
|
||||||
|
bugprone-throw-keyword-missing,
|
||||||
|
bugprone-too-small-loop-variable,
|
||||||
|
bugprone-undefined-memory-manipulation,
|
||||||
|
bugprone-undelegated-constructor,
|
||||||
|
bugprone-unhandled-self-assignment,
|
||||||
|
bugprone-unused-raii,
|
||||||
|
bugprone-unused-return-value,
|
||||||
|
bugprone-use-after-move,
|
||||||
|
bugprone-virtual-near-miss,
|
||||||
|
cert-dcl21-cpp,
|
||||||
|
cert-dcl58-cpp,
|
||||||
|
cert-err34-c,
|
||||||
|
cert-err52-cpp,
|
||||||
|
cert-err60-cpp,
|
||||||
|
cert-flp30-c,
|
||||||
|
cert-msc50-cpp,
|
||||||
|
cert-msc51-cpp,
|
||||||
|
cert-str34-c,
|
||||||
|
cppcoreguidelines-interfaces-global-init,
|
||||||
|
cppcoreguidelines-narrowing-conversions,
|
||||||
|
cppcoreguidelines-pro-type-member-init,
|
||||||
|
cppcoreguidelines-slicing,
|
||||||
|
google-default-arguments,
|
||||||
|
google-explicit-constructor,
|
||||||
|
google-runtime-operator,
|
||||||
|
hicpp-exception-baseclass,
|
||||||
|
hicpp-multiway-paths-covered,
|
||||||
|
misc-misplaced-const,
|
||||||
|
misc-new-delete-overloads,
|
||||||
|
misc-non-copyable-objects,
|
||||||
|
misc-throw-by-value-catch-by-reference,
|
||||||
|
misc-unconventional-assign-operator,
|
||||||
|
misc-uniqueptr-reset-release,
|
||||||
|
modernize-avoid-bind,
|
||||||
|
modernize-concat-nested-namespaces,
|
||||||
|
modernize-deprecated-headers,
|
||||||
|
modernize-deprecated-ios-base-aliases,
|
||||||
|
modernize-loop-convert,
|
||||||
|
modernize-make-shared,
|
||||||
|
modernize-make-unique,
|
||||||
|
modernize-pass-by-value,
|
||||||
|
modernize-raw-string-literal,
|
||||||
|
modernize-redundant-void-arg,
|
||||||
|
modernize-replace-auto-ptr,
|
||||||
|
modernize-replace-disallow-copy-and-assign-macro,
|
||||||
|
modernize-replace-random-shuffle,
|
||||||
|
modernize-return-braced-init-list,
|
||||||
|
modernize-shrink-to-fit,
|
||||||
|
modernize-unary-static-assert,
|
||||||
|
modernize-use-auto,
|
||||||
|
modernize-use-bool-literals,
|
||||||
|
modernize-use-emplace,
|
||||||
|
modernize-use-equals-default,
|
||||||
|
modernize-use-equals-delete,
|
||||||
|
modernize-use-nodiscard,
|
||||||
|
modernize-use-noexcept,
|
||||||
|
modernize-use-nullptr,
|
||||||
|
modernize-use-override,
|
||||||
|
modernize-use-transparent-functors,
|
||||||
|
modernize-use-uncaught-exceptions,
|
||||||
|
mpi-buffer-deref,
|
||||||
|
mpi-type-mismatch,
|
||||||
|
openmp-use-default-none,
|
||||||
|
performance-faster-string-find,
|
||||||
|
performance-for-range-copy,
|
||||||
|
performance-implicit-conversion-in-loop,
|
||||||
|
performance-inefficient-algorithm,
|
||||||
|
performance-inefficient-string-concatenation,
|
||||||
|
performance-inefficient-vector-operation,
|
||||||
|
performance-move-const-arg,
|
||||||
|
performance-move-constructor-init,
|
||||||
|
performance-no-automatic-move,
|
||||||
|
performance-noexcept-move-constructor,
|
||||||
|
performance-trivially-destructible,
|
||||||
|
performance-type-promotion-in-math-fn,
|
||||||
|
performance-unnecessary-copy-initialization,
|
||||||
|
performance-unnecessary-value-param,
|
||||||
|
portability-simd-intrinsics,
|
||||||
|
readability-avoid-const-params-in-decls,
|
||||||
|
readability-const-return-type,
|
||||||
|
readability-container-size-empty,
|
||||||
|
readability-delete-null-pointer,
|
||||||
|
readability-deleted-default,
|
||||||
|
readability-inconsistent-declaration-parameter-name,
|
||||||
|
readability-make-member-function-const,
|
||||||
|
readability-misleading-indentation,
|
||||||
|
readability-misplaced-array-index,
|
||||||
|
readability-non-const-parameter,
|
||||||
|
readability-redundant-control-flow,
|
||||||
|
readability-redundant-declaration,
|
||||||
|
readability-redundant-function-ptr-dereference,
|
||||||
|
readability-redundant-smartptr-get,
|
||||||
|
readability-redundant-string-cstr,
|
||||||
|
readability-redundant-string-init,
|
||||||
|
readability-simplify-subscript-expr,
|
||||||
|
readability-static-accessed-through-instance,
|
||||||
|
readability-static-definition-in-anonymous-namespace,
|
||||||
|
readability-string-compare,
|
||||||
|
readability-uniqueptr-delete-release,
|
||||||
|
readability-use-anyofallof'
|
||||||
|
...
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
Diagnostics:
|
||||||
|
Suppress:
|
||||||
|
- "-Wmicrosoft-enum-forward-reference"
|
||||||
|
- "-Wc++11-narrowing"
|
||||||
|
- "-Wc++2b-extensions"
|
||||||
|
- "-Wmicrosoft-cast"
|
||||||
|
CompileFlags:
|
||||||
|
Add:
|
||||||
|
- "-ferror-limit=0"
|
||||||
|
- '-D__FUNCTION__="dummy"'
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: xmake-io/github-action-setup-xmake@v1
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
xmake repo -u
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
xmake f -a x64 -m release -p windows -v -y
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
xmake -w -y
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ github.event.repository.name }}-windows-x64-${{ github.sha }}
|
||||||
|
path: |
|
||||||
|
bin/
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- published
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: xmake-io/github-action-setup-xmake@v1
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
xmake repo -u
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
xmake f -a x64 -m release -p windows -v -y
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
xmake -w -y
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ github.event.repository.name }}-windows-x64-${{ github.sha }}
|
||||||
|
path: |
|
||||||
|
bin/
|
||||||
|
|
||||||
|
upload-to-release:
|
||||||
|
needs:
|
||||||
|
- build
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ github.event.repository.name }}-windows-x64-${{ github.sha }}
|
||||||
|
path: release/
|
||||||
|
|
||||||
|
- run: |
|
||||||
|
cp LICENSE README.md release/
|
||||||
|
|
||||||
|
- name: Archive release
|
||||||
|
run: |
|
||||||
|
cd release
|
||||||
|
zip -r ../${{ github.event.repository.name }}-windows-x64.zip *
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
- uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
append_body: true
|
||||||
|
files: |
|
||||||
|
${{ github.event.repository.name }}-windows-x64.zip
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
CMakeLists.txt.user
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles
|
||||||
|
CMakeScripts
|
||||||
|
Testing
|
||||||
|
Makefile
|
||||||
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
|
compile_commands.json
|
||||||
|
CTestTestfile.cmake
|
||||||
|
_deps
|
||||||
|
CMakeSettings.json
|
||||||
|
.vscode/
|
||||||
|
build/
|
||||||
|
/.xmake
|
||||||
|
/CMakeLists.txt
|
||||||
|
/bin
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "SDK-GMLIB"]
|
||||||
|
path = SDK-GMLIB
|
||||||
|
url = https://github.com/GroupMountain/SDK-GMLIB.git
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024 GroupMountain
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
Submodule
+1
Submodule SDK-GMLIB added at fa3ec71bdc
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"name": "${pluginName}",
|
||||||
|
"entry": "${pluginFile}",
|
||||||
|
"type": "native",
|
||||||
|
"dependencies": [
|
||||||
|
{
|
||||||
|
"name": "GMLIB"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
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")
|
||||||
|
local outputdir = path.join(bindir, plugin_define.pluginName)
|
||||||
|
local targetfile = path.join(outputdir, plugin_define.pluginFile)
|
||||||
|
local pdbfile = path.join(outputdir, path.basename(plugin_define.pluginFile) .. ".pdb")
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
#include "Entry.h"
|
||||||
|
#include "Global.h"
|
||||||
|
#include <fmt/format.h>
|
||||||
|
#include <functional>
|
||||||
|
#include <ll/api/Config.h>
|
||||||
|
#include <ll/api/io/FileUtils.h>
|
||||||
|
#include <ll/api/plugin/NativePlugin.h>
|
||||||
|
#include <ll/api/plugin/PluginManagerRegistry.h>
|
||||||
|
#include <memory>
|
||||||
|
#include <stdexcept>
|
||||||
|
ll::Logger logger(PLUGIN_NAME);
|
||||||
|
|
||||||
|
namespace change_this {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
std::unique_ptr<std::reference_wrapper<ll::plugin::NativePlugin>>
|
||||||
|
selfPluginInstance; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
||||||
|
|
||||||
|
auto disable(ll::plugin::NativePlugin& /*self*/) -> bool {
|
||||||
|
logger.info("disabling...");
|
||||||
|
|
||||||
|
// Your code here.
|
||||||
|
|
||||||
|
logger.info("disabled");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto enable(ll::plugin::NativePlugin& /*self*/) -> bool {
|
||||||
|
logger.info("enabling...");
|
||||||
|
|
||||||
|
logger.info("enabled");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto load(ll::plugin::NativePlugin& self) -> bool {
|
||||||
|
logger.info("loading...");
|
||||||
|
|
||||||
|
selfPluginInstance = std::make_unique<std::reference_wrapper<ll::plugin::NativePlugin>>(self);
|
||||||
|
|
||||||
|
// Your code here.
|
||||||
|
|
||||||
|
logger.info("loaded");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto unload(ll::plugin::NativePlugin& self) -> bool {
|
||||||
|
auto& logger = self.getLogger();
|
||||||
|
|
||||||
|
logger.info("unloading...");
|
||||||
|
|
||||||
|
selfPluginInstance.reset();
|
||||||
|
|
||||||
|
// Your code here.
|
||||||
|
|
||||||
|
logger.info("unloaded");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
auto getSelfPluginInstance() -> ll::plugin::NativePlugin& {
|
||||||
|
if (!selfPluginInstance) {
|
||||||
|
throw std::runtime_error("selfPluginInstance is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
return *selfPluginInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace change_this
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
_declspec(dllexport) auto ll_plugin_disable(ll::plugin::NativePlugin& self) -> bool {
|
||||||
|
return change_this::disable(self);
|
||||||
|
}
|
||||||
|
_declspec(dllexport) auto ll_plugin_enable(ll::plugin::NativePlugin& self) -> bool { return change_this::enable(self); }
|
||||||
|
_declspec(dllexport) auto ll_plugin_load(ll::plugin::NativePlugin& self) -> bool { return change_this::load(self); }
|
||||||
|
_declspec(dllexport) auto ll_plugin_unload(ll::plugin::NativePlugin& self) -> bool { return change_this::unload(self); }
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ll/api/plugin/NativePlugin.h>
|
||||||
|
|
||||||
|
namespace change_this {
|
||||||
|
|
||||||
|
[[nodiscard]] auto getSelfPluginInstance() -> ll::plugin::NativePlugin&;
|
||||||
|
|
||||||
|
} // namespace change_this
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <ll/api/Logger.h>
|
||||||
|
// #include <include_all.h>
|
||||||
|
|
||||||
|
#define PLUGIN_NAME "plugin"
|
||||||
|
|
||||||
|
extern ll::Logger logger;
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// This file will make your plugin use LeviLamina's memory operators by default.
|
||||||
|
// This improves the memory management of your plugin and is recommended to use.
|
||||||
|
|
||||||
|
#define LL_MEMORY_OPERATORS
|
||||||
|
|
||||||
|
#include <ll/api/memory/MemoryOperators.h>
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
add_rules("mode.debug", "mode.release")
|
||||||
|
|
||||||
|
add_repositories("liteldev-repo https://github.com/LiteLDev/xmake-repo.git")
|
||||||
|
|
||||||
|
if not has_config("vs_runtime") then
|
||||||
|
set_runtimes("MD")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Option 1: Use the latest version of LeviLamina released on GitHub.
|
||||||
|
add_requires("levilamina")
|
||||||
|
|
||||||
|
-- Option 2: Use a specific version of LeviLamina released on GitHub.
|
||||||
|
-- add_requires("levilamina x.x.x")
|
||||||
|
|
||||||
|
-- Option 3: Use the latest commit of LeviLamina on GitHub.
|
||||||
|
-- -- Here, "develop" is the branch name. You can change it to any branch name you want.
|
||||||
|
-- add_requires("levilamina develop")
|
||||||
|
-- -- You can also use debug build of LeviLamina.
|
||||||
|
-- -- add_requires("levilamina develop", {debug = true})
|
||||||
|
-- package("levilamina")
|
||||||
|
-- add_urls("https://github.com/LiteLDev/LeviLamina.git")
|
||||||
|
|
||||||
|
-- add_deps("ctre 3.8.1")
|
||||||
|
-- add_deps("entt 3.12.2")
|
||||||
|
-- add_deps("fmt 10.1.1")
|
||||||
|
-- add_deps("gsl 4.0.0")
|
||||||
|
-- add_deps("leveldb 1.23")
|
||||||
|
-- add_deps("magic_enum 0.9.0")
|
||||||
|
-- add_deps("nlohmann_json 3.11.2")
|
||||||
|
-- add_deps("rapidjson 1.1.0")
|
||||||
|
-- add_deps("pcg_cpp 1.0.0")
|
||||||
|
-- add_deps("pfr 2.1.1")
|
||||||
|
-- add_deps("preloader 1.4.0")
|
||||||
|
-- add_deps("symbolprovider 1.1.0")
|
||||||
|
|
||||||
|
-- -- You may need to change this to the target BDS version of your choice.
|
||||||
|
-- add_deps("bdslibrary 1.20.50.03")
|
||||||
|
|
||||||
|
-- on_install(function (package)
|
||||||
|
-- import("package.tools.xmake").install(package)
|
||||||
|
-- end)
|
||||||
|
|
||||||
|
target("GMLIB-Plugin-Template") -- Change this to your plugin name.
|
||||||
|
add_cxflags(
|
||||||
|
"/EHa",
|
||||||
|
"/utf-8"
|
||||||
|
)
|
||||||
|
add_defines(
|
||||||
|
"NOMINMAX",
|
||||||
|
"UNICODE"
|
||||||
|
)
|
||||||
|
add_files(
|
||||||
|
"src/**.cpp"
|
||||||
|
)
|
||||||
|
add_links(
|
||||||
|
"SDK-GMLIB/Lib/GMLIB"
|
||||||
|
)
|
||||||
|
add_includedirs(
|
||||||
|
"SDK-GMLIB",
|
||||||
|
"src"
|
||||||
|
)
|
||||||
|
add_packages(
|
||||||
|
"levilamina"
|
||||||
|
)
|
||||||
|
add_shflags(
|
||||||
|
"/DELAYLOAD:bedrock_server.dll" -- Magic to import symbols from BDS
|
||||||
|
)
|
||||||
|
set_exceptions("none") -- To avoid conflicts with /EHa
|
||||||
|
set_kind("shared")
|
||||||
|
set_languages("c++23")
|
||||||
|
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)
|
||||||
Reference in New Issue
Block a user