Skip to content

Commit

Permalink
feat: bind DimensionAPI
Browse files Browse the repository at this point in the history
  • Loading branch information
engsr6982 committed Jan 18, 2025
1 parent aae9ba6 commit cd658d1
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 3 deletions.
15 changes: 15 additions & 0 deletions lib/dts/api/level/Dimension.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/// <reference path="../../index.d.ts"/>

declare class Dimension {
toString(): "<Dimension>" | string;

getName(): string;

getType(): Enums.DimensionType;

getLevel(): Level;

// getBlockAt(x: number, y: number, z: number): Block; // TODO: BlockAPI

// getBlocks(location: Location): Block; // TODO: BlockAPI、LocationAPI
}
10 changes: 10 additions & 0 deletions lib/dts/enum/DimensionType.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/// <reference path="../index.d.ts"/>

declare namespace Enums {
enum DimensionType {
Overworld = 0,
Nether = 1,
TheEnd = 2,
Custom = 999,
}
}
7 changes: 6 additions & 1 deletion src/api/jse/EnumAPI.cc
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "api/jse/EnumAPI.h"
#include "endstone/level/dimension.h"
#include "utils/Convert.h"
#include "utils/Using.h"
#include <endstone/game_mode.h>
Expand All @@ -10,7 +11,7 @@

#define REGISTER_ENUM_MACRO(ENUM, NAME) \
for (auto [value, key] : magic_enum::enum_entries<ENUM>()) { \
map[NAME][key] = static_cast<int>(value); \
map[NAME][key] = static_cast<int>(value); \
}

namespace jse::EnumAPI {
Expand All @@ -21,10 +22,14 @@ void RegisterEnum(ScriptEngine* engine) {
REGISTER_ENUM_MACRO(endstone::PermissionDefault, "PermissionDefault");
REGISTER_ENUM_MACRO(endstone::PluginLoadOrder, "PluginLoadOrder");
REGISTER_ENUM_MACRO(endstone::Logger::Level, "LoggerLevel");
REGISTER_ENUM_MACRO(endstone::Dimension::Type, "DimensionType");
REGISTER_ENUM_MACRO(endstone::GameMode, "GameMode");
return map;
}();

// Fix magic_enum serach scope -128 ~ 128
enumMap["DimensionType"]["Custom"] = static_cast<int>(endstone::Dimension::Type::Custom);

engine->set("Enums", ConvertToScriptX(enumMap));
}

Expand Down
10 changes: 9 additions & 1 deletion src/api/level/DimensionAPI.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@


namespace jse {


ClassDefine<DimensionAPI> DimensionAPI::builder = defineClass<DimensionAPI>("Dimension")
.constructor(nullptr)
.instanceFunction("toString", &DimensionAPI::toString)
Expand All @@ -12,10 +14,16 @@ ClassDefine<DimensionAPI> DimensionAPI::builder = defineClass<DimensionAPI>("Dim
.instanceFunction("getLevel", &DimensionAPI::getLevel)
.instanceFunction("getBlockAt", &DimensionAPI::getBlockAt)
.build();


Local<Value> DimensionAPI::toString(Arguments const& /* args */) { return ConvertToScriptX("<Dimension>"); }

Local<Value> DimensionAPI::getName(Arguments const& /* args */) { return ConvertToScriptX(get()->getName()); }

Local<Value> DimensionAPI::getType(Arguments const& /* args */) { return ConvertToScriptX(get()->getType()); }

Local<Value> DimensionAPI::getLevel(Arguments const& /* args */) { return LevelAPI::newLevelAPI(&get()->getLevel()); }
Local<Value> DimensionAPI::getBlockAt(Arguments const& /* args */) { return Local<Value>(); }

Local<Value> DimensionAPI::getBlockAt(Arguments const& /* args */) { return Local<Value>(); } // TODO: BlockAPI

} // namespace jse
9 changes: 8 additions & 1 deletion src/api/level/DimensionAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@


namespace jse {


class DimensionAPI : public ScriptClass {
endstone::Dimension* mDimension;

Expand All @@ -16,14 +18,19 @@ class DimensionAPI : public ScriptClass {
static Local<Object> newDimensionAPI(endstone::Dimension* dimension) {
return (new DimensionAPI(dimension))->getScriptObject();
}

endstone::Dimension* get() { return mDimension; }

public:
METHODS(toString);
METHODS(getName);
METHODS(getType);
METHODS(getLevel);
METHODS(getBlockAt); // todo 实现Block
METHODS(getBlockAt); // TODO: BlockAPI

public:
static ClassDefine<DimensionAPI> builder;
};


} // namespace jse
2 changes: 2 additions & 0 deletions src/manager/BindAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "api/jse/FileAPI.h"
#include "api/jse/JSEAPI.h"
#include "api/lang/TranslatableAPI.h"
#include "api/level/DimensionAPI.h"
#include "api/level/LevelAPI.h"
#include "api/permissions/PermissibleAPI.h"
#include "api/permissions/PermissionAPI.h"
Expand Down Expand Up @@ -42,6 +43,7 @@ inline void BindAPI(ScriptEngine* engine) {
REGISTER_CLASS(TranslatableAPI);

REGISTER_CLASS(LevelAPI);
REGISTER_CLASS(DimensionAPI);

REGISTER_CLASS(PermissibleAPI);
REGISTER_CLASS(PermissionAPI);
Expand Down

0 comments on commit cd658d1

Please sign in to comment.