Skip to content

Commit

Permalink
feat: 添加Permission类及关联API实现
Browse files Browse the repository at this point in the history
  • Loading branch information
engsr6982 committed Dec 23, 2024
1 parent 4440861 commit 0e04140
Show file tree
Hide file tree
Showing 8 changed files with 254 additions and 62 deletions.
6 changes: 4 additions & 2 deletions lib/dts/API/Permissible.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ declare class Permissible {
setOp(value: boolean): void;

isPermissionSet(name: string): boolean;
// isPermissionSet(perm: Permission): boolean // TODO

isPermissionSet(perm: Permission): boolean;

hasPermission(name: string): boolean;
// hasPermission(perm: Permission): boolean // TODO

hasPermission(perm: Permission): boolean;

// addAttachment(plugin: Plugin): any // TODO
// addAttachment(plugin: Plugin, name: string, value: boolean): any // TODO
Expand Down
28 changes: 28 additions & 0 deletions lib/dts/API/Permission.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@


declare class Permission {
toString(): "Permission"

getName(): string;

getChildren(): { [k: string]: boolean };

getDefault(): Enums.PermissionDefault;

setDefault(default_: Enums.PermissionDefault): void;

getDescription(): string

setDescription(description: string): void;

getPermissibles(): Permissible[];

recalculatePermissibles(): void;

addParent(name: string, value: boolean): Permission;

addParent(perm: Permission, value: boolean): void;

// init(): any; // TODO
}

8 changes: 4 additions & 4 deletions lib/dts/API/Plugin.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,17 @@ interface Plugin { // 保证正常补全
/** 插件是否已启用 */
isEnabled(): boolean;

// getPluginLoader(): any;
// getPluginLoader(): any; // TODO

// getServer(): any;
// getServer(): any; // TODO

/** 获取插件名字 */
getName(): string;

// getCommand(): any;
// getCommand(): any; // TODO

/** 获取插件的数据存储目录 */
getDataFolder(): string;

// registerEvent(): any;
// registerEvent(): any; // TODO
}
106 changes: 53 additions & 53 deletions lib/dts/API/PluginDescription.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,56 +2,56 @@

/** 插件相关信息 */
declare class PluginDescriptionAPI {
private constructor();

toString(): "<PluginDescriptionAPI>";

/** 获取插件名字 */
getName(): string;
/** 获取插件版本 */
getVersion(): string;
/** 获取插件完整名字(名字+版本) */
getFullName(): string;
/** 获取插件所需API版本 */
getAPIVersion(): string;
/** 获取插件描述 */
getDescription(): string;
/** 获取插件加载顺序 */
getLoad(): Enums.PluginLoadOrder;
/** 获取插件作者列表 */
getAuthors(): string[];
/** 获取插件贡献者列表 */
getContributors(): string[];
/** 获取插件网站 */
getWebsite(): string;
/** 获取插件日志标题 */
getPrefix(): string;
/** 获取本插件向外提供的API */
getProvides(): string[];
/** 获取插件依赖 */
getDepend(): string[];
/** 获取插件可选依赖 */
getSoftDepend(): string[];
/** 获取将此插件视为可选依赖的插件 */
getLoadBefore(): string[];
/** 获取插件默认命令权限 */
getDefaultPermission(): Enums.PermissionDefault;
// getCommands(): any;
// getPermissions(): any;
}
private constructor();

toString(): "<PluginDescriptionAPI>";

/** 获取插件名字 */
getName(): string;

/** 获取插件版本 */
getVersion(): string;

/** 获取插件完整名字(名字+版本) */
getFullName(): string;

/** 获取插件所需API版本 */
getAPIVersion(): string;

/** 获取插件描述 */
getDescription(): string;

/** 获取插件加载顺序 */
getLoad(): Enums.PluginLoadOrder;

/** 获取插件作者列表 */
getAuthors(): string[];

/** 获取插件贡献者列表 */
getContributors(): string[];

/** 获取插件网站 */
getWebsite(): string;

/** 获取插件日志标题 */
getPrefix(): string;

/** 获取本插件向外提供的API */
getProvides(): string[];

/** 获取插件依赖 */
getDepend(): string[];

/** 获取插件可选依赖 */
getSoftDepend(): string[];

/** 获取将此插件视为可选依赖的插件 */
getLoadBefore(): string[];

/** 获取插件默认命令权限 */
getDefaultPermission(): Enums.PermissionDefault;

// getCommands(): any; // TODO

getPermissions(): Permission[];
}
11 changes: 9 additions & 2 deletions src/API/PermissibleAPI.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "PermissibleAPI.h"
#include "API/CommandSenderAPI.h"
#include "API/PermissionAPI.h"
#include "API/PluginAPI.h"
#include "APIHelper.h"
#include "Loader/JavaScriptPlugin.h"
Expand Down Expand Up @@ -53,8 +54,11 @@ Local<Value> PermissibleAPI::isPermissionSet(Arguments const& args) {
if (args[0].isString()) {
// overload 1
return ConvertToScriptX(this->mPermissible->isPermissionSet(args[0].asString().toString()));
} else if (IsInstanceOf<PermissionAPI>(args[0])) {
// overload 2
return ConvertToScriptX(this->mPermissible->isPermissionSet(*PermissionAPI::unWarp(args[0])));
}
// TODO: overload 2
return ConvertToScriptX(false);
}
Catch;
}
Expand All @@ -64,8 +68,11 @@ Local<Value> PermissibleAPI::hasPermission(Arguments const& args) {
if (args[0].isString()) {
// overload 1
return ConvertToScriptX(this->mPermissible->hasPermission(args[0].asString().toString()));
} else if (IsInstanceOf<PermissionAPI>(args[0])) {
// overload 2
return ConvertToScriptX(this->mPermissible->hasPermission(*PermissionAPI::unWarp(args[0])));
}
// TODO: overload 2
return ConvertToScriptX(false);
}
Catch;
}
Expand Down
97 changes: 97 additions & 0 deletions src/API/PermissionAPI.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#include "PermissionAPI.h"
#include "API/APIHelper.h"
#include "API/PermissibleAPI.h"
#include "Utils/Convert.h"
#include "endstone/permissions/permission_default.h"

namespace jse {

Local<Value> PermissionAPI::toString(Arguments const& args) { return ConvertToScriptX("Permission"); }

Local<Value> PermissionAPI::getName(Arguments const& args) {
try {
return ConvertToScriptX(this->mPermission->getName());
}
Catch;
}

Local<Value> PermissionAPI::getChildren(Arguments const& args) {
try {
return ConvertToScriptX(this->mPermission->getChildren());
}
Catch;
}

Local<Value> PermissionAPI::getDefault(Arguments const& args) {
try {
return ConvertToScriptX(this->mPermission->getDefault());
}
Catch;
}

Local<Value> PermissionAPI::setDefault(Arguments const& args) {
try {
this->mPermission->setDefault(ConvertFromScriptX<endstone::PermissionDefault>(args[0]));
return Local<Value>();
}
Catch;
}

Local<Value> PermissionAPI::getDescription(Arguments const& args) {
try {
return ConvertToScriptX(this->mPermission->getDescription());
}
Catch;
}

Local<Value> PermissionAPI::setDescription(Arguments const& args) {
try {
this->mPermission->setDescription(args[0].asString().toString());
return Local<Value>();
}
Catch;
}

Local<Value> PermissionAPI::getPermissibles(Arguments const& args) {
try {
auto perms = this->mPermission->getPermissibles();
auto array = Array::newArray(perms.size());
for (auto p : perms) {
array.add(PermissibleAPI::newPermissibleAPI(p));
}
return array;
}
Catch;
}

Local<Value> PermissionAPI::recalculatePermissibles(Arguments const& args) {
try {
this->mPermission->recalculatePermissibles();
return Local<Value>();
}
Catch;
}

Local<Value> PermissionAPI::addParent(Arguments const& args) {
try {
if (args[0].isString()) {
if (auto val = this->mPermission->addParent(args[0].asString().toString(), args[1].asBoolean().value())) {
return PermissionAPI::newPermissionAPI(val);
}
} else if (IsInstanceOf<PermissionAPI>(args[0])) {
this->mPermission->addParent(*unWarp(args[0]), args[1].asBoolean().value());
}
return Local<Value>();
}
Catch;
}

Local<Value> PermissionAPI::init(Arguments const& args) {
try {
// TODO
}
Catch;
}


} // namespace jse
46 changes: 46 additions & 0 deletions src/API/PermissionAPI.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#pragma once
#include "API/APIHelper.h"
#include "Utils/Defines.h"
#include "Utils/Using.h"
#include "endstone/permissions/permission.h"


namespace jse {


class PermissionAPI : public ScriptClass {
endstone::Permission* mPermission;

public:
explicit PermissionAPI(endstone::Permission* permission)
: ScriptClass(ScriptClass::ConstructFromCpp<PermissionAPI>{}),
mPermission(permission) {}

static Local<Object> newPermissionAPI(endstone::Permission* permission) {
return (new PermissionAPI{permission})->getScriptObject();
}

static endstone::Permission* unWarp(Local<Value> val) {
if (IsInstanceOf<PermissionAPI>(val)) {
return EngineScope::currentEngine()->getNativeInstance<PermissionAPI>(val)->get();
}
return nullptr;
}

endstone::Permission* get() { return mPermission; }

METHODS(toString);
METHODS(getName);
METHODS(getChildren);
METHODS(getDefault);
METHODS(setDefault);
METHODS(getDescription);
METHODS(setDescription);
METHODS(getPermissibles);
METHODS(recalculatePermissibles);
METHODS(addParent);
METHODS(init);
};


} // namespace jse
14 changes: 13 additions & 1 deletion src/API/PluginDescriptionAPI.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "PluginDescriptionAPI.h"
#include "API/APIHelper.h"
#include "API/PermissionAPI.h"
#include "Engine/EngineData.h"
#include "Utils/Convert.h"
#include "Utils/Using.h"
Expand Down Expand Up @@ -74,7 +75,18 @@ PLUGINDESCRIPTIONAPI_MACRO(getDefaultPermission, GETDESCRIPTION_MACRO(getDefault

PLUGINDESCRIPTIONAPI_MACRO(getCommands, return Local<Value>()); // todo

PLUGINDESCRIPTIONAPI_MACRO(getPermissions, return Local<Value>()); // todo
// PLUGINDESCRIPTIONAPI_MACRO(getPermissions, GETDESCRIPTION_MACRO(getPermissions));
Local<Value> PluginDescriptionAPI::getPermissions(Arguments const& args) {
try {
auto perms = ENGINE_DATA()->mPlugin->getDescription().getPermissions();
auto array = Array::newArray(perms.size());
for (auto p : perms) {
array.add(PermissionAPI::newPermissionAPI(&p));
}
return array;
}
Catch;
}

#undef PLUGINDESCRIPTIONAPI_MACRO
#undef GETDESCRIPTION_MACRO
Expand Down

0 comments on commit 0e04140

Please sign in to comment.