-
Notifications
You must be signed in to change notification settings - Fork 1
SimpleExample
MoreDimensions 提供了基础的世界生成类型,这些api在src/more_dimensions/api/dimension/SimpleCustomDimension.h
这里面提供了一个简单的维度类,可以生成原版的Void,Flat,Overworld,Nether,TheEnd这几种类型的维度。
使用起来也非常简单,下面一步步开始怎么使用
本教程只涉及了基础的C++知识
确保你有以下环境
- 安装了C++桌面开发的
msbuild(v143)或者MS Studio - 一个你熟悉的文件编辑器,本教程使用
vscode -
Git(建议vscode里也安装对应插件) -
xmake(vscode需要安装对应插件,同名直接搜) -
clangd(vscode需要安装对应插件,同名直接搜) - 一个已经安装了levilamina的BDS
本教程全程使用xmake构建项目
首先clone插件模板,在你任意文件夹内,使用以下指令clone插件模板到本地
git clone --depth 1 https://github.com/LiteLDev/levilamina-plugin-template.git
上面指令执行成功后,你可以在执行了clone的目录看到levilamina-plugin-template文件夹
(可选)重命名levilamina-plugin-template为simple-dimensions,利于辨认
进入simple-dimensions文件夹
左键空白处,选择Open with Code,在vs code里面打开这个文件夹
由于本插件是依赖more-dimensions的,得配置插件的加载顺序,让我们写的插件加载比more-dimensions晚
在插件的根目录下,你会看到manifest.json这个文件,里面的初始内容大概如下:
{
"name": "${pluginName}",
"entry": "${pluginFile}",
"type": "native"
}
在type的下一行加入以下内容
"dependencies": [
{
"name": "more-dimensions"
}
]
变成这样
{
"name": "${pluginName}",
"entry": "${pluginFile}",
"type": "native",
"dependencies": [
{
"name": "more-dimensions"
}
]
}
如果你的vs code还没有安装xmake插件,请先安装
在文件列表里点击xmake.lua这个文件来,打开文件内容后,在里面添加more-dimensions依赖
add_requires("more-dimensions 0.2.1") -- 使用v0.2.1版本
在写本教程时最新发布是v0.2.1,结合看本教程的时候最新版本更改
把
target("my-plugin")
改成
target("simple-dimensions")
在target分层下面添加
add_packages("more-dimensions")
然后使用以下指令初次构建与下载依赖,等待时间可能会很长,可以先执行以下指令,让其后台跑,继续跟教程走
xmake -y
在Vscode内打开MyPlugin.cpp文件
导入头文件
#include "ll/api/event/server/ServerStartedEvent.h"
#include "more_dimensions/api/dimension/CustomDimensionManager.h"
#include "more_dimensions/api/dimension/SimpleCustomDimension.h"
在文件的最后一行加入以下内容
static bool reg = [] {
using namespace ll::event;
// 使用ll提供的开服事件触发创建维度,你也可以使用指令在游戏内执行触发创建维度
EventBus::getInstance().emplaceListener<ServerStartedEvent>([](ServerStartedEvent&) {
// 使用345作为地形种子生成Overworld类型的维度
more_dimensions::CustomDimensionManager::getInstance().addDimension<more_dimensions::SimpleCustomDimension>(
"newDimension", 345
);
// 使用345作为地形种子生成Flat类型的维度
more_dimensions::CustomDimensionManager::getInstance()
.addDimension<more_dimensions::SimpleCustomDimension>("newFlatDimension", 345, GeneratorType::Flat);
// 使用345作为地形种子生成Nether类型的维度
more_dimensions::CustomDimensionManager::getInstance()
.addDimension<more_dimensions::SimpleCustomDimension>("newNetherDimension", 345, GeneratorType::Nether);
// 使用345作为地形种子生成TheEnd类型的维度
more_dimensions::CustomDimensionManager::getInstance()
.addDimension<more_dimensions::SimpleCustomDimension>("newTheEndDimension", 345, GeneratorType::TheEnd);
// 使用345作为地形种子生成Void类型的维度,这里种子设置会是无效的,种子只对地形生效
more_dimensions::CustomDimensionManager::getInstance()
.addDimension<more_dimensions::SimpleCustomDimension>("newVoidDimension", 345, GeneratorType::Void);
});
return true;
}();
这个简单维度类注册接受三个参数,这个三个参数来自两个不同的函数组成,第一个name是SimpleCustomDimension构造函数的第一个参数,第二第三个参数是来自SimpleCustomDimension::generateNewData函数
这些查看CustomDimensionManager::addDimension(std::string const& dimName, Args&&... args)的实现即可明白
写好上面后,就已经完成创建新维度的步骤,现在我们可以放到有levilamina的BDS中体验
执行以下指令构建插件
xmake
如无意外在插件根目录下会有个bin文件夹,里面会有个simple-dimensions文件夹,这就是已经打包好的插件
直接复制nxn-border-terrain这个文件夹,放到BDS目录/plugins文件夹内,同时,也记得把more-dimensions也放进去
接下来启动BDS即可,关于ll的安装请看这里levilamina安装
启动BDS后,如果创建维度成功,会在存档目录里生成一个记录维度信息的json文件:

此文件不要更改,手动修改极有可能损失存档数据
进入游戏后,你可以直接使用tp指令传送到自定义的维度,在tp指令里的维度参数会有对应的参数补全,这里拿其中一个示例
tp ~ 100 ~ new_dimension
不出意外,你可以成功传送到对应的维度。
在SimpleCustomeDimension的构建维度中传入了seed参数,但这个只对维度的地形生效,在后续教程中也有体现。
那么为什么不能对维度中的结构生效呢?因为结构生成时是用服务器配置文件server.properties或者存档创建时随机生成的种子判断生成的。
本教程过于简单,故不提供示例文件