- 欢迎来到Minecraft插件百科!
- 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
- 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
FastAsyncWorldEdit:修订间差异
(→修改世界) |
|||
第1,754行: | 第1,754行: | ||
- 稀有程度是一个在 0 到 100 之间的值。 | - 稀有程度是一个在 0 到 100 之间的值。 | ||
= FawePlayer = | |||
要想得到new Player的话请使用 <code>FawePlayer.wrap(玩家, uuid, 用户名, 等等)</code> | |||
这里是方法 - getWorld - getLocation - sendTitle - resetTitle - getLimit - getName - getUUID - hasPermission - setPermission - sendMessage - executeCommand - getPlayer - getSession - getSelection - setSelection - getCurrentRegions - getLargestRegion - hasWorldEditBypass - setMeta - getMeta - deleteMeta - getNewEditSession - runIfFree - runAsyncIfFree | |||
请查看: https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/object/FawePlayer.java | |||
= FaweQueue = | |||
=== 免责声明 === | |||
FaweQueue 是修改世界最基础的类,当正确使用时处理速度很快。但替代使用这个,我推荐使用 Operations 或[https://github.com/boy0001/FastAsyncWorldedit/wiki/WorldEdit-EditSession EditSession],因为它们可以将很抽象的任务简化,并且相对于FaweQueue的普通方法而言,它们可以提供更好的表现。如果你想让更能适应 Bukkit API 的话,你也可以使用 [https://github.com/boy0001/FastAsyncWorldedit/wiki/AsyncWorld AsyncWorld] 。 | |||
=== FaweQueue === | |||
FaweQueue 是从异步线程中修改世界的基础队列 - 使用它有效率地修改整个区块或其中的个别方块 - 查看 EditSession 或 AsyncWorld ,这些使用起来更简单,但是速度会慢些 - 如果你想控制更多的话,队列(queue)能够强制转换为 NMSMappedFaweQueue. | |||
<source lang="java">// 自动进入队列意味着方块会在它们被刷新之前开始放置 | |||
FaweQueue queue = FaweAPI.createQueue(worldName, autoQueue); | |||
queue.setBlock(0, 0, 0, id, data); | |||
queue.setBiome(0, 0, biome); | |||
// 设置整个区块 | |||
FaweChunk<?> chunk = queue.getFaweChunk(5, 5); | |||
chunk.fill(id, data); | |||
chunk.addToQueue(); | |||
// 为位置重复相同任务 | |||
chunk = chunk.copy(true); | |||
chunk.setLoc(queue, 5, 6); | |||
chunk.addToQueue();</source> | |||
=== NMS 方法 === | |||
对于一些支持的平台也有更多方法。你可以通过将 <code>FaweQueue</code> 类型来强制转换为 <code>NMSMappedFaweQueue</code> 来访问这些。 更多信息: https://github.com/c7w/FastAsyncWorldedit/wiki/Light-API | |||
=Fawe-TaskManager = | |||
=== 异步任务 === | |||
很基础的东西,但这是你可以使用 FAWE TaskManager 来运行异步任务的方法。 | |||
<source lang="java">TaskManager.IMP.async(new Runnable() { | |||
@Override | |||
public void run() { | |||
// Do stuff here? | |||
} | |||
});</source> | |||
=== 同步任务 === | |||
使用 FAWE TaskManager 你可以切换使用主线程(原来为异步处理)然后执行任务。 | |||
<source lang="java">// 从异步线程中获得玩家背包内容 | |||
// 例如:方法异步处理不安全的话 | |||
PlayerInventory inventory = TaskManager.IMP.sync(new RunnableVal<PlayerInventory>() { | |||
@Override | |||
public void run(PlayerInventory value) { | |||
this.value = player.getInventory(); | |||
} | |||
});</source> | |||
'''''什么时候使用这个?''''' - 你想调用的方法使用异步处理不安全 - 使用异步处理任务会有性能问题 | |||
= Jobs-API = | |||
一些类似于 Job API 的东西。 | |||
=== [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/util/SetQueue.java SetQueue] === | |||
这个类中有成队列的本地队列。每个本地队列都是由成队列的区块改变组成的可能与 EditSession 相关联,它可能与一个玩家有关。 | |||
SetQueue 会检测激活和未激活的队列: | |||
<source lang="java">// 激活的队列已经完成了等候 | |||
Collection<FaweQueue> active = SetQueue.IMP.getActiveQueues(); | |||
// 未激活的队列可能还在等候其他区块改变或其他任务 | |||
Collection<FaweQueue> inactive = SetQueue.IMP.getInactiveQueues(); | |||
Collection<FaweQueue> all = SetQueue.IMP.getAllQueues();</source> | |||
=== 示例:获得一名玩家等候队列中的方块! === | |||
你可以从这里获得一名玩家当前运行的 EditSessions :[https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/object/FawePlayer.java#L443 <code>FawePlayer#getTrackedSessions</code>]。<br /> | |||
在每个 EditSession 中你能获得改变的方块: [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/sk89q/worldedit/EditSession.java#L327 <code>EditSession#getLimitUsed</code>],但是这不会一定对应于当前队列中的方块(当队列任务完成后才能分配)。 | |||
你也可以通过使用 FaweQueue ([https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/sk89q/worldedit/EditSession.java#L417 <code>EditSession#getQueue</code>]), 你可以获得激活的区块: [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/object/FaweQueue.java#L137 <code>FaweQueue#getFaweChunks</code>], 然后每个激活的区块都可以强制转换类型为 [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/example/CharFaweChunk.java <code>CharFaweChunk</code>] 然后使用 [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/example/CharFaweChunk.java#L86 <code>CharFaweChunk#getTotalCount</code>] | |||
=== 撤销一次修改 === | |||
在获取当前的 EditSession 之后,只要使用 [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/sk89q/worldedit/EditSession.java#L365 <code>EditSession#cancel</code>] 就好了。 | |||
= Light-API = | |||
与 [https://github.com/boy0001/FastAsyncWorldedit/wiki/FaweQueue FaweQueue] 有关联 | |||
=== 获取当前的 NMS 队列 === | |||
<source lang="java">boolean autoQueue = false; | |||
NMSMappedFaweQueue nmsQueue = (NMSMappedFaweQueue) SetQueue.IMP.getNewQueue("worldName", true, autoQueue);</source> | |||
相关联的方法 - relight(int x, int y, int z) - relightBlock(int x, int y, int z) - relightSky(int x, int y, int z) - setSkyLight(int x, int y, int z, int value) - setBlockLight(int x, int y, int z, int value) | |||
相关联的类 - [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/object/FaweQueue.java FaweQueue] - [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/example/MappedFaweQueue.java MappedFaweQueue] - [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java NMSMappedFaweQueue] | |||
= NBT-stream-API = |
2017年8月15日 (二) 04:51的版本
FastAsyncWorldEdit
FAWE 是一款 WorldEdit 插件的附属插件,它改变了 WorldEdit 插件中大量核心类,彻底的提升了原插件的性能,为其增加了大量的新功能。
- > 安装 <
- > 聊天
IRC
|
Discord
|
Gitter
|
Spigot Forums
<
- > 资源
|
API <
- > 构建版本 <
- > 命令 <
- > 权限 <
- > 教程 <
- > 汇报问题/特性 <
目前支持的平台
PC: SP/MP, MCPE: MP
- CraftBukkit
- Spigot
- Paper
- Thermos
- Forge
- Sponge
- Nukkit
区域限制:
当前支持下列区域插件:
- WorldGuard
- Towny
- GriefPrevention
- PreciousStones
- Factions (mcore, uuid, one)
- Residence
- Regios
- PlotSquared
- PlotMe
你可以在配置中禁用本项,也可以使用
/wea
或者fawe.bypass
来跳过检查
记录与回滚操作
请在
config.yml
中启用use-disk
和use-database
来使用 FAWE 插件开发中的记录与回滚操作。作为记录选项,在安装 BlocksHub 插件后就支持下列的记录插件了。
- CoreProtect
- LogBlock
- Prism
- HawkEye
给予普通玩家使用 FAWE 回滚操作的权限是安全的,要想跳过记录请使用
//fast
命令
总览
本页面是由资源文件生成的。点击下列指令旁边的编辑(edit)按钮来直接修改命令的类。
你需要找到跟帮助文档对应的命令的相关部分。
命令的帮助文档与游戏中可使用的命令是一致的。
要想在游戏中查看这些信息的话请使用 //help [类型|命令]
## 命令的用法
- <arg>
- 一个必需参数
- [arg]
- 一个可选参数
- <arg1|arg2>
- 提供的多选一选项
- <arg=value>
- 默认或建议你使用的值
- -a
- 一条命令的标记,如 //<command> -a [命令的标记的值]
## 也请看看 - Masks - Patterns - Transforms
总览
本页面是由资源文件生成的。点击下列指令旁边的编辑(edit)按钮来直接修改命令的类。
你需要找到跟帮助文档对应的命令的相关部分。
命令的帮助文档与游戏中可使用的命令是一致的。
要想在游戏中查看这些信息的话请使用 //help [类型|命令]
## 命令的用法
- <arg>
- 一个必需参数
- [arg]
- 一个可选参数
- <arg1|arg2>
- 提供的多选一选项
- <arg=value>
- 默认或建议你使用的值
- -a
- 一条命令的标记,如 //<command> -a [命令的标记的值]
## 也请看看 - Masks - Patterns - Transforms
目录
点击类型的名字去查看该类型下命令的列表,或者点击 更多信息
获取更多详细信息
World Edit 命令
(更新,信息,调试以及帮助命令)工具命令
(一些工具的命令: 更多信息)区域命令
(一些对区域起作用的命令: 更多信息)选区命令
(变更你的选取点,模式或是查看你当前选区的有关信息: 更多信息)历史命令
(撤销,反撤销,清除历史记录的有关命令: 更多信息)Schematic 命令
(跟 schematic 文件有关的命令)剪切板命令
(跟复制和粘贴方块有关的命令: 更多信息)
* 生成命令
(创建结构或特性: 更多信息)
生物群系命令
(改变,列出或检查生物群系)Anvil 命令
(操纵超大量的方块: 更多信息)超级镐子命令
(超级镐子命令: 更多信息)导航命令
(关于让玩家在地上移动的命令: 更多信息)快照命令
(列出,读取或查看有关快照的更多信息)快照功能命令
(更多信息)脚本命令
(运行 craftscripts 脚本: 更多信息)区块命令
([旧版] 检索区块:更多信息)选项命令
(玩家切换,设置与显示物品信息)笔刷选项命令
(工具命令)工具命令
(将某些功能绑定到持有的物品上: 更多信息)笔刷命令
(能够从远处建筑的命令。 更多信息)/Masks
(帮助设立蒙版。 更多信息)/Patterns
(对一些模板很有帮助。 更多信息)/Transforms
(对一些改造很有帮助。 更多信息)
未分类的命令
别称 | 权限 | 标记 | 使用方法 |
---|---|---|---|
//cancel | fawe.cancel | 取消你当前正在进行的任务 | |
/plot replaceall | plots.replaceall | 替换地皮世界中所有的方块 | |
/plot createfromimage | plots.createfromimage | 从一张高度图图片开始世界生成: 更多信息 |
/we threads
权限: worldedit.threads
描述: 显示出所有的线程堆栈
/we version
描述: 获取当前 WorldEdit / FAWE 插件的版本信息 */we help [<command>]
权限:worldedit.help
描述: 显示出 FAWE 插件的命令帮助信息
/we debugpaste
权限:worldedit.debugpaste
描述: 将调试信息上传到 hastebin.com
/we changelog
权限:worldedit.changelog
描述: 查看 FAWE 插件的更新日志
/we reload
权限:worldedit.reload
描述: 重载插件配置
/we tz [timezone]
描述: 设置你的快照的时间区域/we cui
描述: 完成 CUI 信息交换(内部开发使用)
Utility 命令 [
编辑
|
回到顶部
]
(一些功能命令: 更多信息)
/remove <type> <radius>
权限: worldedit.remove
描述: 移除所有指定类型的实体
//fill <block> <radius> [depth]
权限:worldedit.fill
描述: 填充一块洞
//help [<command>]
描述: 显示 WorldEdit 插件的帮助命令//drain <radius>
权限:worldedit.drain
描述: 排开一片池塘内的水
//removenear <block> [size]
权限:worldedit.removenear
描述: 移除你附近的方块
//fillr <block> <radius> [depth]
权限:worldedit.fill.recursive
描述: 递归填充周围的洞
//removeabove [size] [height]
权限:worldedit.removeabove
描述: 移除你头上方的方块
//fixlava <radius>
权限:worldedit.fixlava
描述: 让岩浆静止
//removebelow [size] [height]
权限:worldedit.removebelow
描述: 移除你脚下方的方块
//fixwater <radius>
权限:worldedit.fixwater
描述: 让水静止
//green [radius] [-f]
权限:worldedit.green
描述: 绿化半径中的区域
//replacenear <size> <from-id> <to-id> [-f]
权限:worldedit.replacenear
描述: 替换附近的方块
//snow [radius]
权限:worldedit.snow
描述: 模仿下雪
/butcher [radius] [-p] [-l] [-a] [-n] [-g] [-b] [-t] [-f] [-r]
权限:worldedit.butcher
描述: 击杀附近的怪物,根据半径,如果没有特别给出半径的话则使用配置文件中的默认半径。
可用的标记:
-p 也击杀宠物
-n 也击杀 NPC
-g 也击杀铁傀儡
-a 也击杀动物。
-b 也击杀中立生物
-t 也击杀带有名字的怪物
-f 相当于这以前所有标记的混合
-r 也击杀盔甲架
-l 目前啥都不能干 * //ex [radius]
权限: worldedit.extinguish
描述: 熄灭周围的火 * //thaw [radius]
权限: worldedit.thaw
描述: 使周围的区域中的雪与冰熔化
//calc <expression>
权限:worldedit.calc
描述: 求一个数学表达式的值
//confirm
描述: 确认一条命令
Region 命令 [
编辑
|
回到顶部
]
(一些对区域起作用的命令: 更多信息)
//replace [from-mask] <to-pattern> [-f]
权限: worldedit.region.replace
描述: 用给定的方块替换选区中所有另一给定的方块 * //stack [count] [direction] [-s] [-a] [-m]
权限: worldedit.region.stack
描述: 重复选区中的内容
标记:
-s 将上一堆叠的选取换挡为最终选区
-a 跳过空气方块 * //set [pattern]
权限: worldedit.region.set
描述: 将选取设置为给定方块
//fall [replace] [-m]
权限:worldedit.region.fall
描述: 让选区中的方块掉落
-m 标记仅会让方块在竖直位置上下落。
//faces <block>
权限:worldedit.region.faces
描述: 建造出选区的墙壁,天花板和地板 * //center <block>
权限: worldedit.region.center
描述: 设置出选区的中心方块 * //hollow [<thickness>[ <block>]]
权限: worldedit.region.hollow
描述: 挖空本区域中的物体
你可定义挖空的部分用什么方块填充
厚度用曼哈顿距离来计算。 * //smooth [iterations] [-n]
权限: worldedit.region.smoothsnow
描述: 平滑化区域的陡峭程度。
-n 标记互让它仅更改自然生成的方块。
-s 标记让它只更改雪方块。 * //nbtinfo
权限: worldedit.nbtinfo
描述: 查看一个方块的NBT信息
//setskylight
权限:worldedit.light.set
描述: 设置一个选区的天空亮度
//line <block> [thickness] [-h]
权限:worldedit.region.line
描述: 在长方体选择区域的两个角落划出一条对角线线段。
仅能够在长方体选区中使用。
可用的标记:
-h 仅会生成外形 * //getlighting
权限: worldedit.light.fix
描述: 获取某位置的亮度信息
//overlay <block>
权限:worldedit.region.overlay
描述: 在给定区域的顶层方块上方覆盖给定方块
//wea
权限:fawe.admin
描述: 跳过区域检测限制
//wer
权限:fawe.worldeditregion
描述: 选择你当前允许的区域
//fixlighting
权限:worldedit.light.fix
描述: 修复某位置的光照
//removelight
权限:worldedit.light.remove
描述: 移除某位置的光照
//curve <block> [thickness] [-h]
权限:worldedit.region.curve
描述: 过选择的点画一条曲线。
只能在使用凸多面体选区类型时才能使用。
Flags:
-h 仅会生成外形
//naturalize
权限:worldedit.region.naturalize
描述: 顶层覆盖3层泥土,下面为石头
//walls <block>
权限:worldedit.region.walls
描述: 围上选区的四边
//setblocklight
权限:worldedit.light.set
描述: 设置选区中的方块亮度
//lay <block>
权限:worldedit.region.overlay
描述: 设置选区的顶层方块
//move [count] [direction] [leave-id] [-s]
权限:worldedit.region.move
描述: 将选区中的内容移动。.
-s 标记会将选区换挡到目标位置。
-b 也会复制生物群系
-e 忽略实体
-a 忽略空气
自动使用 <leave-id> 填充旧区域。
//forest [type] [density]
权限:worldedit.region.forest
描述: 在区域内生成森林
//flora [density]
权限:worldedit.region.flora
描述: 在区域内生成植物群 * //deform <expression> [-r] [-o]
权限: worldedit.region.deform
描述: 使用给定的表达式使区域变形
表达式对每个方块都会执行,它可以
将方块的x,y,z修改到新方块的位置
来实现。也请看看 tinyurl.com/wesyntax。
//regen [biome] [seed]
权限:worldedit.regen
描述: 重新生成当前选区中的内容。
这条命令也有可能影响选区外的东西,
如果它们在相同区块中的话。
Selection 命令 [
编辑
|
回到顶部
]
(改变你选区的点,选取模式或是查看关于你的选区的信息: 更多信息)
//count <block> [-d]
权限: worldedit.analysis.count
描述: 为当前选区中某种类型的方块计数
//size [-c]
权限:worldedit.selection.size
描述: 获取当前选区的信息
//expand <amount> [reverse-amount] <direction>
权限:worldedit.selection.expand
描述: 延展选区区域
//shift <amount> [direction]
权限:worldedit.selection.shift
描述: 移动选区区域
//sel [cuboid|extend|poly|ellipsoid|sphere|cyl|convex] [-d]
描述: 选择选区类型//contract <amount> [reverse-amount] [direction]
权限:worldedit.selection.contract
描述: 缩小选区区域
//pos1 [coordinates]
权限:worldedit.selection.pos
描述: 设置选取点1
//pos2 [coordinates]
权限:worldedit.selection.pos
描述: 设置选取点2
//chunk [x,z coordinates] [-s] [-c]
权限:worldedit.selection.chunk
描述: 将选取设置为当前你所在的区块。
写入 -s 标记你当前的选区会被延展
来包括所有为它的部分的区块。
也可以使用给定的坐标,这会替代你的
当前位置。使用-c来指定区块坐标,
否则就会使用全局坐标。
(举个例子,坐标5,5和 -c 0,0 是一样的) * //hpos1
权限: worldedit.selection.hpos
描述: 将选取点1设置为目标方块
//wand
权限:worldedit.wand
描述: 获取魔杖物品
/toggleeditwand
权限:worldedit.wand.toggle
描述: 切换编辑魔杖的功能启用与否
//hpos2
权限:worldedit.selection.hpos
描述: 将选取点2设置为目标方块
//outset <amount> [-h] [-v]
权限:worldedit.selection.outset
描述: 使用给定的数值,在所有方向上延展选区。
可用标记:
-h 仅会延展横向
-v 仅会延展纵向
//distr [-c] [-d]
权限:worldedit.analysis.distr
描述: 获得选区内方块的分布情况。
-c 标记会获得你剪切板内容的分布情况。
-d 标记会将方块用数据分割
//inset <amount> [-h] [-v]
权限:worldedit.selection.inset
描述: 使用给定的数值,在所有方向上缩小选区。
可用标记:
-h 仅会缩小横向
-v 仅会缩小纵向
History 命令 [
编辑
|
回到顶部
]
(能够撤销操作,反撤销操作,清除历史的相关命令: 更多信息)
//redo [times] [player]
权限: worldedit.history.redo
描述: 反撤销上个操作(从历史记录中)
//clearhistory
权限:worldedit.history.clear
描述: 清除你的历史记录
//undo [times] [player]
权限:worldedit.history.undo
描述: 撤销上个操作
//frb <user=Empire92> <radius=5> <time=3d4h>
权限:worldedit.history.rollback
描述: 撤销某个给定的操作。 - 时间使用以下单位: s(秒), m(分钟), h(小时), d(天), y(年)。
- 从硬盘中导入: /frb #import
Schematic 命令 [
编辑
|
回到顶部
]
(跟 schematic 文件有关的命令)
/schematic load [<format>] <filename>
权限: worldedit.clipboard.load
, worldedit.schematic.load
, worldedit.schematic.upload
, worldedit.schematic.load.other
描述: 将某个schematic文件导入到你的剪切板中
/schematic delete <filename>
权限:worldedit.schematic.delete
描述: 将某个schematic文件从文件列表中移除
/schematic list [mine|<filter>] [page=1] [-d] [-n] [-p]
权限:worldedit.schematic.list
描述: 列出所有schematic路径下的可用文件
-p <页码数> 能够列出指定页面的文件
-f <format> 启用格式限制
/schematic save [<format>] <filename>
权限:worldedit.clipboard.save
,worldedit.schematic.save
,worldedit.schematic.save.other
描述: 使用你的剪切板的内容储存到schematic文件中
/schematic remap
权限:worldedit.schematic.remap
描述: 将剪切板在MCPE/PC的值之间交换 * /schematic formats
权限: worldedit.schematic.formats
描述: 列出所有可用的格式
/schematic loadall [<format>] <filename|url>
权限:worldedit.clipboard.load
,worldedit.schematic.load
,worldedit.schematic.upload
描述: 读取多个剪切板
-r 标记可以应用随机旋转位置
Clipboard 命令 [
编辑
|
回到顶部
]
(跟复制和粘贴方块有关的命令: 更多信息)
//copy [-e] [-m]
权限: worldedit.clipboard.copy
描述: 将选区中的内容复制到剪切板中
可用标记:
-e 跳过复制实体
-m 设置资源蒙版,蒙版外的方块会作为空气复制
-b 也会复制生物群系
警告:实体的粘贴不能被撤销!
//flip [<direction>]
权限:worldedit.clipboard.flip
描述: 沿着复制发生时的那个点为剪切板中的内容进行镜面翻转。
//rotate <y-axis> [<x-axis>] [<z-axis>]
权限:worldedit.clipboard.rotate
描述: 不会有破坏性的旋转剪切板中的内容。
角度需要输入度数,正数会进行顺时针旋转。你也可以堆叠进行多次旋转。插值是不被接受,且没有任何作用的,所以角度的度数应该是90的倍数。
//lazycopy [-e] [-m]
权限:worldedit.clipboard.lazycopy
描述: 将选区中的内容延迟复制到剪切板中
可用标记:
-e 跳过复制实体
-m 设置资源蒙版,蒙版外的方块会作为空气复制
-b 也会复制生物群系
警告:实体的粘贴不能被撤销!
//place [-s] [-a] [-o]
权限:worldedit.clipboard.place
描述: 不应用任何变化(例如:旋转)放置剪切板的内容。
可用参数:
-a 跳过空气方块
-o 粘贴在原位置
-s 在粘贴之后将选区定在粘贴区域
//cut [leave-id] [-e] [-m]
权限:worldedit.clipboard.cut
描述: 将选区剪切到粘贴板之中
可用参数:
-e 跳过复制实体
-m 设置资源蒙版,蒙版外的方块会作为空气复制
-b 也会复制生物群系
警告:实体的粘贴不能被撤销! * /download
权限: worldedit.clipboard.download
描述: 通过配置的网页接口下载剪切板的内容
/asset [category]
权限:worldedit.clipboard.asset
描述: 将你的剪切板的内容保存到网页资源接口中
//paste [-s] [-a] [-o]
权限:worldedit.clipboard.paste
描述: 粘贴剪切板的内容。
可用参数:
-a 跳过空气方块
-b 跳过粘贴生物群系
-e 跳过粘贴实体
-o 粘贴到原位置
-s 在粘贴之后将选区定在粘贴区域
//lazycut [-e] [-m]
权限:worldedit.clipboard.lazycut
描述: 将选区中的内容延迟剪切到剪切板之中
可用参数:
-e 跳过复制实体
-m 设置资源蒙版,蒙版外的方块会作为空气复制
-b 也会复制生物群系
警告:实体的粘贴不能被撤销!
/clearclipboard
权限:worldedit.clipboard.clear
描述: 清除你的剪切板
Generation 命令 [
编辑
|
回到顶部
]
(创建结构或特性: 更多信息)
//image <imgur> [randomize=true] [complexity=100]
权限: worldedit.generation.image
描述: 创建一张图片
//generate <block> <expression> [-h] [-r] [-o] [-c]
权限:worldedit.generation.shape
描述: 根据表达式创建结构,表达式返回的值
应该是正数(返回true,如果选择点在结构内的话)
可选地,你可以设置目标方块的类型或数据。
可选参数:
-h 创建凹下去的结构
-r 使用原版Minecraft坐标
-o 与 -r 相似,但使用相对坐标。
-c 与 -r 相似,但相对坐标的中心不同。
如果你既没有没有输入 -r ,也没有输入 -o 的话,选区会自动映射为 -1..1
详见 tinyurl.com/wesyntax。
//cyl <block> <radius>[,<radius>] [height] [-h]
权限:worldedit.generation.cylinder
描述: 生成圆柱体。
通过指定用逗号分隔的两个半径,
你能够创建椭圆体。
第一个参数指定南北距离,第二个参数指定东西距离。
//sphere <block> <radius>[,<radius>,<radius>] [raised?] [-h]
权限:worldedit.generation.sphere
描述: 生成内部填充的球。
通过指定用逗号分隔的三个半径,
你能够创建椭球体。椭球体半径的距离的指定顺序为:
南北,上下,东西。
//ore <mask> <pattern> <size> <freq> <rarity> <minY> <maxY>
权限:worldedit.generation.ore
描述: 生成矿物
//caves [size=8] [freq=40] [rarity=7] [minY=8] [maxY=127] [sysFreq=1] [sysRarity=25] [pocketRarity=0] [pocketMin=0] [pocketMax=3]
权限:worldedit.generation.caves
描述: 生成网状的洞穴结构
//hcyl <pattern> <radius>[,<radius>] [height]
权限:worldedit.generation.cylinder
描述: 生成中空的圆柱体。
通过指定用逗号分隔的两个半径,
你能够创建椭圆体。
第一个参数指定南北距离,第二个参数指定东西距离。
//ores
权限:worldedit.generation.ore
描述: 生成矿物
//hsphere <block> <radius>[,<radius>,<radius>] [raised?]
权限:worldedit.generation.sphere
描述: 生成中空的球体。
通过指定用逗号分隔的三个半径,
你能够创建椭球体。椭球体半径的距离的指定顺序为:
南北,上下,东西。
/forestgen [size] [type] [density]
权限:worldedit.generation.forest
描述: 生成森林
//hpyramid <block> <size>
权限:worldedit.generation.pyramid
描述: 生成中空的金字塔
/pumpkins [size]
权限:worldedit.generation.pumpkins
描述: 生成南瓜群
//pyramid <block> <size> [-h]
权限:worldedit.generation.pyramid
描述: 生成填充过的金字塔
//generatebiome <biome> <expression> [-h] [-r] [-o] [-c]
权限:worldedit.generation.shape
,worldedit.biome.set
描述: 根据表达式创建结构,表达式返回的值
应该是正数(返回true,如果选择点在结构内的话)
可选地,你可以设置目标方块的类型或数据。
可选参数:
-h 创建凹下去的结构
-r 使用原版Minecraft坐标
-o 与 -r 相似,但使用相对坐标。
-c 与 -r 相似,但相对坐标的中心不同。
如果你既没有没有输入 -r ,也没有输入 -o 的话,选区会自动映射为 -1..1
详见 tinyurl.com/wesyntax。
Biome 命令 [
编辑
|
回到顶部
]
(改变,列出或检查生物群系)
//setbiome <biome> [-p]
权限: worldedit.biome.set
描述: 设置区域的生物群系。
默认生成的生物群系会使用你选区中所有的方块构成。
-p 会使用你当前所在的区块。
/biomeinfo [-p] [-t]
权限:worldedit.biome.info
描述: 获取区块的生物群系。
默认获取的生物群系会检测你选区中所有的方块。
-t 使用你正在看着的那个区块。
-p 会使用你当前所在的区块。
/biomelist [page]
权限:worldedit.biome.list
描述: 获取所有可用的生物群系。
Anvil 命令 [
编辑
|
回到顶部
]
(Manipulate billions of blocks: 更多信息)
/anvil count <ids> [-d]
权限: worldedit.anvil.count
描述: 为选区中的方块计数
/anvil replace [from-block] <to-block>
权限:worldedit.anvil.replace
描述: 用一种方块替换选区中的所有另一种方块
/anvil replaceall <folder> [from-block] <to-block> [-d] [-f]
权限:worldedit.anvil.replaceall
描述: 用另一种方块替换选区中的所有方块
-d 标记会禁用通配符的匹配
/anvil copy
权限:worldedit.anvil.copychunks
描述: 将区块延迟复制到你的anvil剪切板中
/anvil paste [-c]
权限:worldedit.anvil.pastechunks
描述: 从anvil剪切板将内容粘贴出来。
-c 标记会调整将内容粘贴到区块中。
/anvil distr
权限:worldedit.anvil.distr
描述: 用另一种方块替换选区中的所有方块
/anvil trimallplots
权限:worldedit.anvil.trimallplots
描述: 修剪地皮世界中的区块
未认领的区块会被删除
未修改的区块会被删除
使用 -v 来删除没有人去过的区块
/anvil countall <folder> [hasSky] <id> [-d]
权限:worldedit.anvil.countall
描述: 为世界中的方块计数
/anvil clear
权限:worldedit.anvil.clear
描述: 清除选区的区块(不整理磁盘碎片就删除)
/anvil removelayers <id>
权限:worldedit.anvil.removelayer
描述: 如果某一区块的顶层方块全部都匹配提供的方块类型的话,就移除顶层方块。
/anvil replacepattern [from-mask] <to-pattern>
权限:worldedit.anvil.replace
描述: 移除选区内所有匹配模型的方块
/anvil remapall <folder>
权限:worldedit.anvil.remapall
描述: 将世界在MCPE和PC的存档格式之间转换
/anvil deletealloldregions <folder> <time>
权限:worldedit.anvil.deletealloldregions
描述: 移除一段时间内没有人进入的区域
你可以使用秒 (s), 分钟 (m), 小时 (h), 天 (d), 周 (w),和 年 (y) 来计算时间
(请注意:月份不是计算时间的单位)
举个例子: 8h5m12s
/anvil replaceallpattern <folder> [from-block] <to-pattern> [-d] [-m]
权限:worldedit.anvil.replaceall
描述: 将选区中所有的方块替换成另一种
/anvil deleteallunvisited <folder> <age-ticks> [file-age=60000]
权限:worldedit.anvil.deleteallunvisited
描述: 移除所有加载时间没有到指定整数刻的区块(20t = 1s) and
在创建文件后的文件持续时间 file-duration
(ms) 内不能访问
没有在过去的 chunk-inactivity
(ms)中使用。自动保存的间隔推荐是 file-duration
和 chunk-inactivity
的值
Super Pickaxe 命令 [
编辑
|
回到顶部
]
(超级镐子相关命令: 更多信息)
/sp recur <radius>
权限: worldedit.superpickaxe.recursive
描述: 启用递归超级镐子模式
/sp area <radius>
权限:worldedit.superpickaxe.area
描述: 启用区域超级镐子模式
/sp single
权限:worldedit.superpickaxe
描述: 启用单个方块的超级镐子模式
(关于玩家在地面上移动的相关命令: 更多信息)
/descend [# of floors]
权限: worldedit.navigation.descend
描述: 向下降一层
/ascend [# of levels]
权限:worldedit.navigation.ascend
描述: 向上升一层
/thru
权限:worldedit.navigation.thru.command
描述: 穿过墙壁
/jumpto [world,x,y,z]
权限:worldedit.navigation.jumpto.command
描述: 传送到某一位置
/ceil [clearance] [-f] [-g]
权限:worldedit.navigation.ceiling
描述: 去天花板上
/up <block> [-f] [-g]
权限:worldedit.navigation.up
描述: 向上移动一段距离
/unstuck
权限:worldedit.navigation.unstuck
描述: 在卡在方块中的情况下逃脱
Snapshot 命令 [
编辑
|
回到顶部
]
(列出,读取快照以及查看跟快照有关的信息)
/snapshotlist [num]
权限: worldedit.snapshots.list
描述: 列出某一快照
/snapshotafter <date>
权限:worldedit.snapshots.restore
描述: 选择距离一个时间最近的快照,快照发布时间在该时间之后
/snapshotbefore <date>
权限:worldedit.snapshots.restore
描述: 选择距离一个时间最近的快照,快照发布时间在该时间之前
/snapshotuse <snapshot>
权限:worldedit.snapshots.restore
描述: 选择要使用的快照
/snapshotsel <index>
权限:worldedit.snapshots.restore
描述: 选择根据列表ID排序的某一快照
Snapshot Util 命令 [
编辑
|
回到顶部
]
(更多信息)
/restore [snapshot]
权限: worldedit.snapshots.restore
描述: 从某一快照恢复选区
Scripting 命令 [
编辑
|
回到顶部
]
(执行 CraftScript 脚本 更多信息)
/cs <filename> [args...]
权限: worldedit.scripting.execute
描述: 执行一个 CraftScript 脚本
/.s [args...]
权限:worldedit.scripting.execute
描述: 执行上一个 CraftScript 脚本
Chunk 命令 [
编辑
|
回到顶部
]
([旧版] 检索区块: 更多信息)
/chunkinfo
权限: worldedit.chunkinfo
描述: 获得你当前所在的区块的有关信息
/listchunks
权限:worldedit.listchunks
描述: 列出你的选取包括的区块
/delchunks
权限:worldedit.delchunks
描述: 已过期,请使用 anvil 命令
Options 命令 [
编辑
|
回到顶部
]
(玩家切换设置和物品信息)
//searchitem <query> [-b] [-i]
描述: 搜索某个物品。
Flags:
-b 仅搜索方块
-i 仅搜索物品
//gtransform [transform]
权限:worldedit.global-trasnform
描述: 获取全局变换式
//toggleplace
描述: 在你当前位置和第一个选取点直接切换位置//tips
描述: 切换FAWE提示是否开启//gsmask [mask]
权限:worldedit.global-mask
描述: 能够应用给你的所有编辑的全局资源蒙版,你做出的资源性更改符合本蒙版(例如:剪切板中的方块)
//gmask [mask]
权限:worldedit.global-mask
描述: 能够应用给你的所有编辑的全局目标蒙版,你所有的目标性更改都符合本蒙版(例如:世界中的方块)
//fast [on|off]
权限:worldedit.fast
描述: 切换FAWE插件能否进行撤销操作
Brush Options 命令 [
编辑
|
回到顶部
]
(工具命令)
/target [mode]
描述: 在不同的目标模式之间切换
/size [pattern]
权限:worldedit.brush.options.size
描述: 设置笔刷大小
//listbrush [mine|<filter>] [page=1] [-d] [-n] [-p]
权限:worldedit.brush.list
描述: 列出所有笔刷路径下的笔刷
-p <页码数> 会列出指定页面
/mask [mask]
权限:worldedit.brush.options.mask
描述: 设置笔刷的目标蒙版
/range [pattern]
权限:worldedit.brush.options.range
描述: 设置笔刷的范围
/transform [transform]
权限:worldedit.brush.options.transform
描述: 设置笔刷的变换式
/mat [pattern]
权限:worldedit.brush.options.material
描述: 设置笔刷的材料
/patterns [page=1|search|pattern]
描述: 模型可以决定哪些方块被放置
- 使用[括号]来输入参数
- 使用 , 来代表 或 的分割
举个例子: #surfacespread[10][#existing],andesite
更多信息: https://git.io/vSPmA/savebrush [name]
权限:worldedit.brush.save
描述: 保存你当前的笔刷
使用 -g 标记来做出全局储存
/loadbrush [name]
权限:worldedit.brush.load
描述: 读取笔刷
/transforms [page=1|search|transform]
描述: 变换方块被放置的方式
- 使用[括号]来输入参数
- 使用 , 来代表 或 的分割
- 使用 & 来表示 和 的分割
更多信息: https://git.io/v9KHO/primary [brush arguments]
描述: 设置右键点击激活的笔刷// [on|off]
权限:worldedit.superpickaxe
描述: 切换超级镐子功能
/targetmask [mask]
描述: 设置目标蒙版/none
描述: 从当前物品上解除绑定功能/visualize [mode=0]
描述: 在不同的预览模式之间进行切换
0 = 没有预览
1 = 预览单个目标方块
2 = 用玻璃预览所有将会改变的方块/scroll [none|clipboard|mask|pattern|range|size|visual|target]
描述: 在不同的目标模式之间进行切换/secondary [brush arguments]
描述: 设置左键点击激活的笔刷/smask [mask]
权限:worldedit.brush.options.mask
描述: 设置笔刷的资源蒙版
/masks [page=1|search|mask]
描述: 能够决定方块能否被放置的蒙版
- 使用[括号]来输入参数
- 使用 , 来代表 或 的分割
- 使用 & 来表示 和 的分割
举个例子: >[stone,dirt],#light[0][5],$jungle
更多信息: https://git.io/v9r4K
Tool 命令 [
编辑
|
回到顶部
]
(将某些功能绑定到持有的物品之上: 更多信息)
/tool tree [type]
权限: worldedit.tool.tree
描述: 生成树的工具
/tool repl <block>
权限:worldedit.tool.replacer
描述: 方块替换工具
/tool info
权限:worldedit.tool.info
描述: 方块信息工具
/tool lrbuild <leftclick block> <rightclick block>
权限:worldedit.tool.lrbuild
描述: 大范围建筑工具
/tool cycler
权限:worldedit.tool.data-cycler
描述: 方块数据值循环工具
/tool deltree
权限:worldedit.tool.deltree
描述: 移除漂浮的树的工具
/tool inspect
权限:worldedit.tool.inspect
描述: 选择检查笔刷
/tool floodfill <pattern> <range>
权限:worldedit.tool.flood-fill
描述: 池塘填充工具
/tool farwand
权限:worldedit.tool.farwand
描述: 远程选区工具
Brush 命令 [
编辑
|
回到顶部
]
(从远程建筑与涂画的工具。 更多信息)
/brush copypaste [depth=5]
权限: worldedit.brush.copy
描述: 左键点击一个物体的底座来复制。
右键点击来粘贴
-r 标记能够在粘贴时应用随机旋转
注意:能和剪切板滚动一起搭配使用
视频: https://www.youtube.com/watch?v=RPZIaTbqoZw
/brush command <radius> [cmd1;cmd2...]
权限:worldedit.brush.command
描述: 在点击的位置执行一条命令。
- 你的选区会延展到包括该点
- 可用的变量: {x}, {y}, {z}, {world}, {size}
/brush populateschematic <mask> <file|folder|url> [radius=30] [points=5] [-r]
权限:worldedit.brush.populateschematic
描述: 选择分散型schematic笔刷。
-r 标记能够应用随机旋转
/brush scmd <scatter-radius> <points> <cmd-radius=1> <cmd1;cmd2...>
权限:worldedit.brush.scattercommand
描述: 在表面的随机一点执行命令
- 分散的半径是每个点之间的最小距离
- 你的选区会延展到包括该点
- 可用的变量: {x}, {y}, {z}, {world}, {size}
/brush erode [radius=5]
权限:worldedit.brush.erode
描述: 侵蚀地形
/brush pull [radius=5]
权限:worldedit.brush.pull
描述: 将地形推向你
/brush blendball [radius=5]
权限:worldedit.brush.blendball
描述: 平滑化,混合化地形
图片: https://i.imgur.com/cNUQUkj.png -> https://i.imgur.com/hFOFsNf.png
/brush stencil <pattern> [radius=5] [file|#clipboard|imgur=null] [rotation=360] [yscale=1.0]
权限:worldedit.brush.stencil
描述: 使用高度图来画出地形表面。
-w 标记仅会应用于最大饱和度
-r 标记会应用随机旋转
/brush splatter <pattern> [radius=5] [seeds=1] [recursion=5] [solid=true]
权限:worldedit.brush.splatter
描述: 设置物体表面为随机方块。
图片: https://i.imgur.com/hMD29oO.png
使用示例: /br splatter stone,dirt 30 15
注意:种子决定着会有多少斑点,递归次数决定着其大小,solid决定着模型是按照每个种子应用还是每个方块应用。
/brush cylinder <block> [radius=2] [height=1] [-h]
权限:worldedit.brush.cylinder
描述: 创建圆柱体。
-h 标记会创建空心的圆柱体。
/brush shatter <pattern> [radius=10] [count=10]
权限:worldedit.brush.shatter
描述: 创建将地形分成多个部分的不均匀的线
图片: https://i.imgur.com/2xKsZf2.png
/brush circle <pattern> [radius=5]
权限:worldedit.brush.sphere
描述: 围绕着你看向的方向创建一个圆。
注意:无视笔刷的半径,并且启用预览可以帮助你看到将要放置的东西
/brush smooth [size=2] [iterations=4] [-n]
权限:worldedit.brush.smooth
描述: 选择地形平滑化笔刷。
-n 标记会只让它更改自然生成的方块。
/brush ex [radius=5]
权限:worldedit.brush.ex
描述: 火焰熄灭笔刷的快捷方式
/brush gravity [radius=5] [-h]
权限:worldedit.brush.gravity
描述: 这个笔刷会模仿重力的作用。
-h 标记能够让它从世界的最大Y坐标开始计算,而不是点击方块的Y坐标。
/brush sspl <pattern> [size=0] [tension=0] [bias=0] [continuity=0] [quality=10]
权限:worldedit.brush.surfacespline
描述: 在地面上创建一条曲线。
视频: https://www.youtube.com/watch?v=zSN-2jJxXlM
/brush spline <pattern>
权限:worldedit.brush.spline
描述: 点击一些物体,然后再次点击相同的方块来让你的物体之间进行连接。
笔刷半径设置过小,或是点击位置错误或导致变形。形状必须是简单的线条或者封闭的环形。
图片: http://i.imgur.com/CeRYAoV.jpg -> http://i.imgur.com/jtM0jA4.png
图片2: http://i.imgur.com/bUeyc72.png -> http://i.imgur.com/tg6MkcF.png
/brush surface <pattern> [radius=5]
权限:worldedit.brush.surface
描述: 使用高度图来画出表面。
-w 标记仅会应用于最大饱和度
-r 标记会应用随机旋转
/brush layer <radius> [color|<pattern1> <patern2>...]
权限:worldedit.brush.layer
描述: 使用覆盖层来替换地形。
示例:/br layer 5 95:1 95:2 35:15 - 会在地面上放置一些覆盖层
图片: https://i.imgur.com/XV0vYoX.png
/brush sphere <pattern> [radius=2] [-h]
权限:worldedit.brush.sphere
描述: 创建一个球体。
-h 标记能够创建中空的球体。
/brush clipboard
权限:worldedit.brush.clipboard
描述: 选择剪切板笔刷。
-a 标记会使其不会粘贴空气方块。
不输入 -p 标记,粘贴后的内容的中心会出现在目标位置。输入该标记后,粘贴内容所在的位置就会根据你在复制内容时所站的位置而定义了。
/brush recursive <pattern-to> [radius=5]
权限:worldedit.brush.recursive
描述: 设置所有连接起来的方块。
-d 标记会应用深度优先的顺序
注意:设置蒙版可以递归指定的方块
/brush scatter <pattern> [radius=5] [points=5] [distance=1] [-o]
权限:worldedit.brush.scatter
描述: 在地面上随机放置方块,每两个方块之间有某种距离的联系。
-o 标记会覆盖原方块
视频: https://youtu.be/RPZIaTbqoZw?t=34s
/brush line <pattern> [radius=0] [-h] [-s] [-f]
权限:worldedit.brush.line
描述: 创建线段。
-h 标记仅会创建外壳
-s 标记在创建之后会选择点击的点。
-f 标记会创建平坦的线段。
/brush height [radius=5] [file|#clipboard|imgur=null] [rotation=0] [yscale=1.00] [-h]
权限:worldedit.brush.height
描述: 这个笔刷可以使地形上升或下降。
- -r
标记启用随机坐标旋转
- -l
标记也会在某些雪层中工作
- -s
标记禁用平滑
注意!注意!如果你要降低地形的话请将yscale的值设置为负数
雪的图片: https://i.imgur.com/Hrzn0I4.png
/brush butcher [radius=5] [-p] [-l] [-a] [-n] [-g] [-b] [-t] [-f] [-r]
权限:worldedit.brush.butcher
描述: 击杀在指定的半径内的怪物。
可用的标记:
-p 也击杀宠物
-n 也击杀 NPC
-g 也击杀铁傀儡
-a 也击杀动物。
-b 也击杀中立生物
-t 也击杀带有名字的怪物
-f 相当于这以前所有标记的混合
-r 也击杀盔甲架
-l 目前啥都不能干
/brush flatten [radius=5] [file|#clipboard|imgur=null] [rotation=0] [yscale=1.00] [-h]
权限:worldedit.brush.height
描述: 平坦笔刷,可以使地形平坦
- -r
标记启用随机坐标旋转
- -l
标记也会在某些雪层中工作
- -s
标记禁用平滑
/brush cliff [radius=5] [file|#clipboard|imgur=null] [rotation=0] [yscale=1.00] [-h]
权限:worldedit.brush.height
描述: 这个笔刷可以平坦地形且创建悬崖。
- -r
标记启用随机坐标旋转
- -l
标记也会在某些雪层中工作
- -s
标记禁用平滑
/Masks [
编辑
|
回到顶部
]
(Help for the various masks. 更多信息)
蒙版决定了方块能否被放置 - 使用 [brackets] 来输入参数 - 使用 , 来代表 或 的分割 - 使用 & 来代表 和 的分割 例如: >[stone,dirt],#light[0][5],$jungle 更多信息: https://git.io/v9r4K
#offset <dx> <dy> <dz> <mask>
描述: 使蒙版偏移
% <chance>
描述: 百分比的几率#id
描述: 限制初始ID#data
描述: 限制初始数据值{ <min> <max>
描述: 限制方块与初始方块的距离范围#existing
描述: 设置为非空气方块$ <biome>
描述: 在特殊的生物群系中,要想列出所有的生物群系请使用 //biomelist#surface
描述: 限制为地面(任何接触空气的固体方块! <mask>
描述: 使其他蒙版反向= <expression>
描述: 表达式蒙版#region
描述: 在某个提供的选取内部\ <min> <max>
描述: 限制为特殊的地形角度
-o 标记仅仅会覆盖,举个例子: /[0d][45d]
作用解释:能够选出任何对角线在0-45度之间的方块
示例:/[3][20]
作用解释:能够选出任何对角线在3-20度之间的方块#dregion
描述: 在玩家的选取之中#xaxis
描述: 限制为特殊的x轴位置#yaxis
描述: 限制为特殊的y轴位置#opacity <min> <max>
描述: 限制为指定的不透明度等级#light <min> <max>
描述: 限制为指定的光亮等级#blocklight <min> <max>
描述: 限制为指定的方块亮度等级#haslight
描述: 限制为方块是否拥有光照(天空或环境)~ <mask> [min=1] [max=8]
描述: 邻近的其他方块的数量#brightness <min> <max>
描述: 限制指定的方块光照等级#nolight
描述: 限制方块需要没有光亮(天空或环境)#skylight <min> <max>
描述: 限制需要指定天空光亮等级#simplex <scale=10> <min=0> <max=100>
描述: 使用噪声算法作为蒙版#zaxis
描述: 限制为特殊的z轴位置> <mask>
描述: 在某一指定方块的上面#wall
描述: 限制为墙壁(任意方块,东西南北任意一面为空气)| <mask> <min> <max>
描述: 旁边位置拥有指定数量的其他方块#iddata
描述: 限制指定的方块ID与数据值< <mask>
描述: 在某一指定方块之下#solid
描述: 如果是固体方块
/Patterns [
编辑
|
回到顶部
]
(对于某些模板信息的帮助。 更多信息)
模板决定着放置什么方块 - 使用 [brackets] 输入参数 - 使用 , 来代表 或 的分割 举个例子: #surfacespread[10][#existing],andesite 更多信息: https://git.io/vSPmA
#offset <dx> <dy> <dz> <pattern>
描述: 使模板偏移
#mask <mask> <pattern-true> <pattern-false>
描述: 根据蒙版应用模板#id <pattern>
描述: 只改变方块ID#spread <dx> <dy> <dz> <pattern>
描述: 随机扩散方块#buffer <pattern>
描述: 只有当模板在使用时才放置方块
如果你不想点击某些地方两次时,用它和笔刷搭配#clipboard
描述: 使用你剪切板中的方块作为模板#relative <pattern>
描述: 将模板偏移到你所点击的位置#data <pattern>
描述: 只会改变方块的数据值#biome <biome>
描述: 设置生物群系#existing
描述: 使用已经存在的方块= <expression>
描述: 表达式模板: http://wiki.sk89q.com/wiki/WorldEdit/Expression_syntax#simplex <scale=10> <pattern>
描述: 使用噪声算法来随机放置方块#averagecolor <color> [randomize=true] [max-complexity=100]
描述: 在已经存在的方块和颜色之间平均化#desaturate [percent=100] [randomize=true] [max-complexity=100]
描述: 减小已经存在的方块的颜色的饱和度#darken [randomize=true] [max-complexity=100]
描述: 使已经存在的方块变暗#fullcopy [schem|folder|url=#copy] [rotate=false] [flip=false]
描述: 将你全部的剪切板放置在每个方块上#buffer2d <pattern>
描述: 只有在一列中的模板在使用时才会放置方块#lighten [randomize=true] [max-complexity=100]
描述: 使已存在的方块变亮#saturate <color> [randomize=true] [max-complexity=100]
描述: 增加已经存在的方块的颜色的饱和度#anglecolor [randomize=true] [max-complexity=100]
描述: 依靠于地形偏角的较暗的方块#iddatamask <bitmask=15> <pattern>
描述: 使用模板的ID和提供的蒙版的已存在的方块数据
- 用于替换半砖,数据值需要换挡而不是设置#angledata
描述: 根据已存在的地形偏角的方块数据#!x <pattern>
描述: 本模板不会提供z轴的信息。
举个例子: #!x[#!z[#~[#l3d[pattern]]]]#!y <pattern>
描述: 本模板不会提供y轴的信息#linear <pattern>
描述: 从列表的模板中循序设置方块#!z <pattern>
描述: 本模板不会提供z轴的信息#surfacespread <distance> <pattern>
描述: 随机改变地面上一个方块的位置#linear3d <pattern>
描述: 使用 x,y,z 坐标选定一个来自列表中的方块#solidspread <dx> <dy> <dz> <pattern>
描述: 随机传播固体方块#color <color>
描述: 使用接近于指定颜色的方块
/Transforms [
编辑
|
回到顶部
]
(Help for the various transforms. 更多信息)
变换式会修改方块怎么被放置 - 使用 [brackets] 来输入参数 - 使用 , 来代表 或 的分割 - 使用 & 来代表 和 的分割 更多信息: https://git.io/v9KHO
#offset <dx> <dy> <dz> [transform]
描述: 偏移变换式
#rotate <rotateX> <rotateY> <rotateZ> [transform]
描述: 所有的变化都会被绕着指定位置旋转#scale <dx> <dy> <dz> [transform]
描述: 所有的变化都会依比例决定#pattern <pattern> [transform]
描述: 总是使用给定的模板#spread <dx> <dy> <dz> [transform]
描述: 随机偏移变换式#linear <transform>
描述: 从变换式列表中顺序选择变换式#linear3d <transform>
描述: 使用 x,y,z 坐标选定一个来自列表中的变换式
配置
FAWE 开箱即用,非常高效,但是在限制和队列操作方面的配置设置对于对你的 FAWE 插件进行微调也很有用。请参考下列的内容以及默认配置文件中的注释行。
如果你将配置更改后发现编辑操作有问题的话,请在进行其他微调操作之前将那一项改成默认设置。
要想重置 config.yml 文件的话,请删除它然后重启服务器或使用 /fawe
命令重新载入 FAWE 插件。
异步操作
WorldEdit 自己会在放置方块之前尝试将每个编辑操作完全储存在内存之中。
WorldEdit 也会在内存中储存撤销(历史)方块,在大型编辑时这会增加内存的需求,甚至会导致服务器内存溢出崩溃,或导致编辑失败。
FAWE 提供了大量的速度改善,它将每个编辑操作都分割成了异步的线程。
并且只要可以放置方块之时,方块就会开始放置,而不是等待操作完成。
这让全局编辑的整体速度更快。
同时,因为方块在准备完毕之时就放置完成,它们不会占用内存空间。
FAWE 也能够配置将撤销(历史)方块储存在硬盘之上,这可以与其他性能的改善搭配使用,最终使 FAWE 近乎可以在最小的影响的情况下完成无限大小的编辑。
限制设置
这些设置能够让你控制一些用户组一次编辑可以放置的 WorldEdit 方块的数目。“default”(默认)小节就是为非管理组用户和没有权限跳过限制的用户所准备的。
查看 fawe.bypass 和 fawe.admin 权限来获取更多信息。
你也能通过使用权限节点来定义某些特定用户组的限制,请查看下方的默认配置文件中的注释行。
队列设置
这小节中的设置能够让你微调异步队列操作,影响内存的使用情况与编辑速度。
本地队列
FAWE 会将每个编辑命令放在分割的异步线程之中,而不是服务器主线程,队列中的方块由每个玩家的本地队列来处理。
在队列中,方块按照区域来排序,这能够让 FAWE 使用更高效的优化算法,最终将方块放置(分配)进世界之中。
举个例子,WorldEdit会使用插件本体来执行光照和物理效果,然后发包,每个方块都会改变。
但是另一方面,FAWE将它队列中的方块按照区块分开检测,使用更高效的优化算法,将方块放置进世界中。
在编辑开始时,本地队列进入未完成阶段。
当需要处理的队列方块为简单的 //set 或者是 //copy 这种类型的命令时,方块已经直接准备好放置了。
当使用其他命令(例如 //smooth 和 //deform)来编辑方块时,变化的方块会根据世界上的其他方块的位置决定,并且相关联的方块可能要改变好几次。(代表性地,所有本地更改都会在64个值得方块变化的区块之中完成)
当编辑完全完成之后,本地队列变化成完成状态。
全局队列
FAWE 使用全局队列来真正将所有激活的本地队列的编辑方块放置。
全局队列的处理顺序是按照编辑的优先级的,所以提交时间较长的编辑会首先放置其中的方块。全局队列中的方块放置在世界中是在服务器的主线程上工作的。
FAWE 总是会放置在本地队列中完成的方块。同时,在放置未完成的本地队列中的方块之前,完成的本地队列的列表必须是空的。
全局队列和本地队列连接起来以后编辑正在开发中。(在代码内部这是作为两个队列而执行的,——一个是完成的本地队列,另一个是未完成的)
效率改善
FAWE 也尝试通过“在没有完成的本地队列时,放置未完成的本地队列中的方块”的方式来改善插件的效率。
- target–size
FAWE 使用 target–size 来控制放置未完成队列中的方块数目,同时确保拥有放置的方块稳定不会再次改变的可能。
一些例如 //smooth 和 //deform 的命令,如果它们在命令仍然在处理中分配方块的话结果可能不会按照你想象的那样平滑或变形(虽然这些通常不会修改周围64个区块内的东西)。
这些方块的改变会依照世界上其他方块的位置,并且一些方块可能要多次改变。
在这种情况下,在64个区块进入队列之后任何单个方块都会被不会被重新修改了。
但是对于简单的操作来说不会有这种问题,例如 //copy 和 //set,因为这些方块不会进行多次的改变。
如果没有完成的本地队列等候放置方块,且target–size已设置更多在处理中的编辑区块进入队列的话,全局队列会直接开始处理仍然在处理中的可放置的方块。
这项设置能够确保像 //smooth 和 //deform 这样的命令稳定,同时它也能确保全局队列保持放置可用的方块,而不是闲置。
默认的 target–size 的值是64.
如果不设置 target–size 的话,使用 /fastmode 运行巨大的编辑会导致未完成的队列的填充速度比 max–wait–ms 设置的清空速度更快。
减少 target–size 可能会削弱像 //smooth 和 //deform 这样的命令的表现情况,因为花费在重新改变方块上的时间没了,方块已经放置了。
同时,也因为这些命令会依赖于其他方块的位置,如果 target–size 设置不够大的话,来自未完成队列中的方块会首先放置,但会晚些再改变,方块放置的最终结果和先处理完成再改变的最终结果会有所不同。
这会导致命令的表现不正确。
所以请将 target–size 选项的值设定的足够大来避免这个问题。
增加 target–size 的值可能不是很有帮助,因为大多数相关联的变更都是在64个区块的处理时间内完成的。
同时如果将它设置的很大的话,就会减少 FAWE 能够阻止大型编辑使服务器内存溢出的能力。
- max–wait–ms
FAWE 对于放置已经完成处理的编辑的方块是非常高效的。
但是,等待完成既耗费时间,也占用内存,因此,本设置就是用来尝试将全局队列中的方块分配,而不是让它在编辑还没有完成,但有能放置的方块时闲置的。
全局队列会在没有完成的本地队列,且全局队列空闲时间比 max–wait–ms 所设置的时间长(单位为毫秒)时开始放置仍然在处理中的方块。
max–wait–ms 设置也能解决区块读取连接超时的问题。区块通常的读取速度都是小于一秒的,所以默认的 max–wait–ms 的值是 1000,用于避免编辑冻结或是区块读取错误。
如果区块没有及时加载的话请增加这个数值。
默认配置文件
默认的配置文件展示在了下面。
请注意服务器生成的配置文件是不带注释的。
# 前六项是不能配置的 issues: "https://github.com/boy0001/FastAsyncWorldedit/issues" wiki: "https://github.com/boy0001/FastAsyncWorldedit/wiki/" date: "27 Aug 2017 14:00:00 GMT" build: "https://ci.athion.net/job/FastAsyncWorldEdit/<build>" commit: "https://github.com/boy0001/FastAsyncWorldedit/commit/<hash>" platform: "<platform>" # 可用选项:de # 请创建pull request来贡献翻译: https://github.com/boy0001/FastAsyncWorldedit/new/master/core/src/main/resources language: '' # 允许插件更新 update: true # 将使用的统计发送到 mcstats.org metrics: true # FAWE 在没有足够的可用内存时会跳过处理区块 prevent-crashes: false # 设置为 true 来启用 WorldEdit 对每个区域的限制。(例如: PlotSquared 或 WorldGuard) # 要想在区域中启用 WorldEdit 的话,用户需要许可: # fawe.<plugin> 权限。查看权限页面来获取支持的区域插件。 region-restrictions: true # FAWE 在内存占用超过这个百分比时会取消非管理员做出的编辑 # - 使用 `/wea` 或 `//fast` 或 `fawe.bypass` 跳过检测 # - 写入 100 或 -1 禁用本项。 max-memory-percent: 95 clipboard: # 替代储存到内存中,将剪切板储存到硬盘上 # - 速度些许变慢 # - 每方块占用 2 字节 use-disk: true # 压缩剪切板减少文件大小: # - TODO: 目前还没有实现在硬盘上的压缩随机访问 # - 0 = 不进行压缩 # - 1 = 快速压缩 # - 2-17 = 较慢速度压缩 compression-level: 1 # 在删除之前储存在硬盘上的时间,单位为天 delete-after-days: 1 lighting: # 是否应该在重新计算光照完成后再发包 delay-packet-sending: true async: true # 重新计算光照的模式: # - 0 = 无(不重新计算光照) # - 1 = 优化(重新计算光源和改变的方块的光照) # - 2 = 全局(缓慢重新计算每个方块的光照) mode: 1 # 一般的游戏刻限制(对 WorldEdit 来说不必要,但是可以防止滥用) tick-limiter: # 是否启用限制 enabled: true # 间隔,单位游戏刻 interval: 20 # 在每个间隔间最大的掉落方块数目(每区块) falling: 64 # 每个间隔中最大执行的物理效果数目(每区块) physics: 8192 # 每间隔最大生成的物品数目(每区块) items: 256 web: # 剪切板的网页接口 # - 所有的剪切板都匿名私有储存 # - 下载可以被用户删除 # - 支持剪切板的上传,下载和保存 url: "http://empcraft.com/fawe/" # 资源的网页接口 # - 所有剪切板都是组织好后公开的 # - 资源能够被搜索,选择和下载 assets: "http://empcraft.com/assetpack/" extent: # 当这些插件拖慢了 WorldEdit 的操作速度时不要提示控制台 # - 如果你需要改变本选项时你会在控制台收到提示信息 allowed-plugins: [] # 当第三方延展插件安装后应该显示调试信息吗? debug: true # 实验中的选项,你可以冒险试试 experimental: # [不安全] 直接修改区域文件(已过期——请使用Anvil命令) # - 使用不当会导致世界错误! anvil-queue-mode: false # [安全] 动态增加渲染的区块的数目 # - 需要 Paper 服务端: ci.destroystokyo.com/job/PaperSpigot/ # - 将你的服务器视距上设置为 1 (spigot.yml, server.properties) # - 取决于服务器的 tps 和玩家的移动 # - 请给我们提供反馈信息 dynamic-chunk-rendering: false # 这跟 FAWE 怎么放置区块相关联 queue: # 这个数值应该和你拥有的处理器的核数相同 # - 将此项设置为1,如果你需要可信的 `/timings` 的话 parallel-threads: 8 progress: # 显示一位用户的编辑的进度的恒定title # - false = 禁用 # - title = 显示进度title # - chat = 在聊天栏中显示进度 display: "false" # 编辑进度多久显示一次 interval: 1 # 发送进度的延迟,单位毫秒(快些的话编辑不会刷屏) delay: 5000 # 在编辑比这数目还多的区块时: # - FAWE 会在所有运算完成之前直接开始放置方块 # - 大些的值会些微减少CPU的运算时间 # - 小写的值可以减少内存使用 # - 太小的值会导致一些操作坏掉(例如 deform) target-size: 64 # 强制 FAWE 开始放置区块,不管一项编辑是否完成处理 # - 大些的值会些微减少CPU的运算时间 # - 小写的值可以减少内存使用 # - 太小的值会导致一些操作坏掉(例如 deform) max-wait-ms: 1000 # 增加或减少队列强度(毫秒) [-50,50]: # 0 = 平衡性能与稳定性 # -10 = 为区块放置少分配 10ms # 值太大的话会造成卡顿(你可能感觉没关系) # 值太小的话编辑进度会很慢 extra-time-ms: 0 # 在提速操作之前读取多少数量的区块 # - 值太小的话会导致FAWE等待主线程的请求 # - 值太大的话会占用更多内存也不会感觉变快 preload-chunks: 32 # 抛弃已经闲置了一段时间(ms)的编辑 # - 例如:一款插件创建了 EditSession 但没有使用它做任何事 # - 这只会对不正确使用 WorldEdit 的旧版 API 的插件起作用 discard-after-ms: 60000 history: # 历史记录是否应储存在硬盘上: # - 空闲大量的内存 # - 服务器重启可以存留 # - 可以无限撤销 # - 不会影响编辑的性能,依照 `combine-stages` use-disk: true # 使用数据库来储存硬盘储存的概要: # - 启用检测和回档 # - 不会影响性能 use-database: true # 在分配时记录到历史中: # - 速度更快,因为它避免了重复的方块检查 # - 压缩可能会糟糕一些,因为分配顺序不同 combine-stages: true # 大些的压缩等级减少历史记录的大小,但以占用 CPU 使用率为代价 # 0 = 不压缩字节数组(最快) # 1 = 1 级快速压缩(默认) # 2 = 2 x 快速 # 3 = 3 x 快速 # 4 = 1 x 中速, 1 x 快速 # 5 = 1 x 中速, 2 x 快速 # 6 = 1 x 中速, 3 x 快速 # 7 = 1 x 慢速, 1 x 中速, 1 x 快速 # 8 = 1 x 慢速, 1 x 中速, 2 x 快速 # 9 = 1 x 慢速, 1 x 中速, 3 x 快速 (最佳压缩文件) # 注意:如果你使用硬盘的话,请最好使用压缩,因为较小的文件可以储存的更快 compression-level: 3 # 压缩的缓冲大小: # - 较大 = 更好的比率,但是占用更多内存 # - 必须在以下范围中 [64, 33554432] buffer-size: 531441 # 编辑时最大等待一个区块加载的时间,单位是毫秒。 # (50ms = 1 游戏刻, 0 = 最快). # 默认值 100 应该对大多数情况来说都是安全的。 # # 需要读取区块的操作(例如:复制)在没有及时读取区块时 # 会使用上个区块作为过滤器,这会出现大量复制出的方块。 # 每个读取区块的操作在读取区块时通常都需要25-50ms,在服务器卡顿时甚至更多。 # 所以100ms的等待时间如果区块在10ms内加载完毕了的话也不需要等待100ms。 # # 本值也可以作为万一区块无法读取时(不管是什么原因)操作超时的值 # 如果操作超时了的话,操作就会使用上个区块作为过滤器, # 然后显示出一条错误信息,在这种情况下,你需要要么将选区调整的更小, # 要么将本项的值设置的大一些。 # 输入 0 这个值的速度会很快因为它即不会阻止读取区块也不会等待。 chunk-wait-ms: 1000 # 在几天之后删除硬盘上的历史记录 delete-after-days: 7 # 在玩家登出时是否删除内存中的历史记录(不影响硬盘存储) delete-on-logout: true # 对于一些使用 WorldEdit 的插件来说,历史记录是否默认启用: # - 禁用本项速度会更快 # - 使用 FAWE API 的插件不会受影响 enable-for-console: true # 是否储存反撤销的相关信息: # - 历史记录文件要大大约 20% # - 允许使用 /redo 命令 store-redo: true # 仅记录所有比 4096x256x256 小的编辑: # - 减少历史记录文件的大小大概10% small-edits: false # 一些路径的文件夹名 paths: # 将任何Minecraft或Mod的Jar文件放在这里来使用方块的材质 textures: "textures" heightmap: "heightmap" history: "history" # 群组服务器可以使用相同的剪切板 clipboard: "clipboard" # 是否分离每个玩家schematic文件的路径 per-player-schematics: true # "default" 限制组会影响没有特殊限制权限的用户。 # 要想给某人不同的限制,请复制默认限制组 # 然后重新给他命个名(例如:newbie)。然后给予用户限制的 # 权限节点,使用该限制名(例如: fawe.limit.newbie ) limits: default: # 能够同时运行的操作(例如:命令) max-actions: 1 # 每次最大改变的方块数量(例如:使用 `//set stone` )。 max-changes: 50000000 # 每次最大检测的方块数量(例如:使用 `//count stone` 不会改变方块的命令) max-checks: 50000000 # 一次更改失败的最大次数(例如:玩家没有访问该区域的权限) max-fails: 50000000 # 最大允许的笔刷递归次数(例如: `//brush smooth` ) max-iterations: 1000 # 一次最大能够允许的实体数目(例如:牛) max-entities: 1337 # 包括 Banner, Beacon, BrewingStand, Chest, CommandBlock, # CreatureSpawner, Dispenser, Dropper, EndGateway, Furnace, Hopper, Jukebox, # NoteBlock, Sign, Skull, Structure 的最大方块状态 max-blockstates: 1337 # 玩家历史文件的最大尺寸,单位是MB: # - 超过这个尺寸的历史文件,不管是在硬盘上还是内存中都会被删除 max-history-mb: -1 # //calc 能够执行的每次操作的最大时间,单位毫秒 max-expression-ms: 50 # 动画化方块放置: # - 为方块放置增加延迟(ms/方块) # - 使用虚伪的延迟会导致使用更多CPU与内存 speed-reduction: 0 # 放置区块,而不是单个方块: # - 禁用本项会大幅度降低性能 # - 只有在与动画化方块放置冲突时才禁用本项 fast-placement: true # WorldEdit 应该使用玩家的物品栏放置物品吗? # 0 = 不使用物品栏(创造模式) # 1 = 移除和放置都使用物品栏(免费建筑区) # 2 = 仅放置使用物品栏(生存模式) inventory-mode: 0 # 大型的编辑是否需要确认(需要区块数目大于16384) confirm-large: true
Anvil-API
Anvil API 是用来修改未读取的 MCA 文件的。( <world>/region
)
有关的包: https://github.com/boy0001/FastAsyncWorldedit/tree/master/core/src/main/java/com/boydti/fawe/jnbt/anvil # 使用 FaweQueue
String worldName = "world";
boolean hasSky = true;
File root = new File(worldName + File.separator + "region");
MCAWorld world = new MCAWorld(worldName, root, hasSky);
MCAQueue queue = world.getQueue();
// 在这里使用FaweQueue来做些什么
创建 MCA 文件
File dir = new File("TestWorld/region");
// 从高度图创建新生成器
// 注意:如果你不想使用图片的话,请使用另一个构造函数
BufferedImage heightMap = ImageIO.read(new URL("https://i.imgur.com/plFXYiI.png"));
// 我们的新生成器
HeightMapMCAGenerator gen = new HeightMapMCAGenerator(heightMap, dir);
// 加入一些峭壁
BufferedImage cliffHeightMap = ImageIO.read(new URL("https://i.imgur.com/wx5oiA7.png"));
boolean onlyWhite = false; // Only use the white parts of the heightmap
gen.setColumn(cliffHeightMap, new BaseBlock(BlockID.STONE), onlyWhite);
// 加入一些高草
gen.setOverlay(new BlockMask(gen, new BaseBlock(BlockID.GRASS)), new BaseBlock(BlockID.LONG_GRASS));
// 加入一些洞穴
gen.addCaves();
// 加入一些矿石
gen.addDefaultOres(new BlockMask(gen, new BaseBlock(BlockID.STONE)));
// 加入一些树
World world = WorldEdit.getInstance().getServer().getWorlds().get(0);
WorldData worldData = world.getWorldData();
File treeFolder = new File("trees");
ClipboardHolder[] trees = ClipboardFormat.SCHEMATIC.loadAllFromDirectory(treeFolder, worldData);
Mask flat = new AngleMask(gen, 0, 0); // Only flat terrain
boolean randomRotate = true;
gen.addSchems(flat, worldData, trees, 50, randomRotate);
// 你也能获得/设置指定的方块
// 注意:使用独特的方块的话,速度会比上面提供的方法更慢
gen.setBlock(0, 255, 0, new BaseBlock(BlockID.SPONGE)); // Set a specific block
System.out.println(gen.getLazyBlock(0, 255, 0)); // Get a specific block
// 好了,让我们创建世界吧!
gen.generate();
使用 EditSession
String worldName = "world";
boolean hasSky = true;
File root = new File(worldName + File.separator + "region");
MCAWorld world = new MCAWorld(worldName, root, hasSky);
EditSession editSession = new EditSessionBuilder(world)
.checkMemory(false)
.allowedRegionsEverywhere()
.fastmode(true)
.changeSetNull()
.limitUnlimited()
.build();
// 在这里使用 editSession 来做些什么(世界中没有被创建的区域不能被修改)
替换方块
String worldName = "world";
File root = new File(worldName + File.separator + "region");
MCAQueue queue = new MCAQueue(worldName, root, true);
MCAFilterCounter counter = queue.filterWorld(new MCAFilterCounter() {
@Override
public void applyBlock(int x, int y, int z, BaseBlock block, MutableLong ignore) {
if (block.getId() == 5) { // Change the id if it's 5
block.setId(7);
}
}
});
// 看: FaweBlockMatcher.fromBlocks(...) 会在方块与指定类型匹配时返回 true
// 看: FaweBlockMatcher.setBlocks(...) 能够修改指定方块的类型
删除指定半径外的区块
MCAQueue queue = new MCAQueue(worldName, root, true);
final int radius = 4000;
final int radiusSquared = radius * radius;
queue.filterWorld(new MCAFilter() {
@Override
public MCAFile applyFile(MCAFile mca) {
int distanceX = Math.abs((mca.getX() << 9) + 256) - 256;
int distanceZ = Math.abs((mca.getZ() << 9) + 256) - 256;
int distanceSquared = distanceX * distanceX + distanceZ * distanceZ;
if (distanceSquared > radiusSquared) {
// 因为这个区块超出半径,删除这个文件
mca.close();
mca.getFile().delete();
return null;
} else if (distanceSquared + 512 < radiusSquared) {
// 因为这个 MCA 文件在指定半径内,不修改这个文件
return null;
} else {
return mca;
}
}
@Override
public boolean appliesChunk(int cx, int cz) {
int distanceX = Math.abs((cx << 9) + 8) - 8;
int distanceZ = Math.abs((cz << 9) + 8) - 8;
int distanceSquared = distanceX * distanceX + distanceZ * distanceZ;
if (distanceSquared > radiusSquared) {
// 区块在半径外
return true;
} else {
// 我们不关心在半径内的区块
return false;
}
}
@Override
public MCAChunk applyChunk(MCAChunk chunk) {
chunk.setDeleted(true);
// 我们不想修改方块
return null;
}
});
API
需要帮助?
如果你在写代码这方面需要帮助的话,请随意在 IRC 这里询问。
移植 WorldEdit API 的代码到 FAWE 中
首先,FAWE 不会修改 WorldEdit API 的表现,不过安装 FAWE 之后已经存在的代码会运行的更快。
使代码(使用 WorldEdit API的相关代码)异步工作和将它放入异步线程中一样简单(例如:使用Bukkit 的 scheduler)。
即便如此,FAWE API 也提供了目前 WorldEdit 所不能做到的一些额外功能。下面是一些 WorldEdit 和 FAWE 的例子:
Maven
储存库(Repository): http://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/
前置(Dependency): com.boydti:fawe-api:<version>
或 com.boydti:fawe-api:latest
- Gradle 你能够使用Gradle来为FAWE编码,它已经在本储存库中了:
$ gradlew setupDecompWorkspace $ gradlew build
线程
玩家
异步修改世界(或是读取世界)
NBT 与格式
NMS 相关概念
网页
其他功能
延展特性
FaweAPI 的类
AsyncWorld
AsyncWorld 实现了 Bukkit 世界接口,这能够让你异步访问世界或做出改变。 - 很多对象都能从接口中获得,可以被异步使用(坐标,方块,区块等等) - 只有对方块和生物群系的操控才能优化队列 - 其他操作在使用异步时只会变得更慢 - 你可以使用 AsyncWorld.create(...)
来异步读取某个世界
请注意: AsyncWorld 类只存在于 FastAsyncWorldEdit-bukkit
,而不是 API 中。
TaskManager.IMP.async(new Runnable() {
@Override
public void run() {
// 使用给定的世界创建设定异步创建或读取世界
AsyncWorld world = AsyncWorld.create(new WorldCreator("MyWorld"));
// AsyncWorld world = AsyncWorld.wrap(bukkitWorld); // 或是封包已存在的世界
Block block = world.getBlockAt(0, 0, 0);
block.setType(Material.BEDROCK);
// 在你完成更改之后,请写入
world.commit();
}
});
一些关于异步性能的相关提示
https://github.com/c7w/FastAsyncWorldedit/wiki/Notes-on-async-performance 以及: https://github.com/c7w/FastAsyncWorldedit/wiki/Fawe-TaskManager#sync-task
笔刷
总览
FAWE 拥有能够让你在远处建筑或涂画的笔刷工具。当你启用了一个笔刷之后,笔刷就会绑定在你当前持有的物品上,你可以将不同的工具绑定在不同类型的物品上,单个物品最多绑定两个笔刷。
装备上你的笔刷:
绑定到任意点击上: /br <brush>
绑定到右键点击上: /br primary <brush>
绑定到左键点击上: /br secondary <brush>
修改笔刷设置
/mat <pattern>
- 修改放置方块的模型/mask <mask>
- 修改应该改变的方块的蒙版类型/smask <mask>
- 如果方块可以放置的话源模板的改变/targetmask <mask>
- 能够被笔刷作为目标的方块,默认值是!air
/transform <transform>
- 放置方块处的变换式/range <range>
- 你能够使用笔刷的距离/size <size>
- 你的笔刷的大小(如:半径为10的球体)
/none
- 取消工具的绑定 使用-h
标志来改变你副手中笔刷的相关设定。
改变笔刷的目标位置
你可以改变笔刷对目标定位的相关设置来符合在不同区域建筑的需要(空气,墙,地面等等) 改变 //brush range
也会很有用。 /br target <0-3>
- 0 = 定位方块 - 1 = 定位直接指向的方块,距离由 Pitch 决定 - 2 = 定位一点,距离由自地面算起的高度决定 - 3 = 定位方块的面
增加笔刷行为
使用你的鼠标滚轮来改变笔刷表现 - /br scroll clipboard <file|folder|asset url>
- /br scroll mask <mask1> <mask2...>
- /br scroll pattern <mat1> <mat2...>
- /br scroll range
- /br scroll size
- /br scroll target
重设笔刷
潜行(shift
)然后点击来重设笔刷。 这将会,举个例子,清除你的粘贴笔刷的剪切板,或者重设你的曲线笔刷的相关点。
显现笔刷的范围
使用 FAWE 你能够显现出笔刷将会怎么改变方块: /br vis <0-2>
- 0 = 不显现 - 1 = 显现单个点 - 2 = 所有将会改变的方块全部显现
视频: https://www.youtube.com/watch?v=xX-MTSLoNXw
图片: https://i.imgur.com/J2g6Qfn.jpg
笔刷:
剪切板-API
FAWE 安装之后,你就能使用 API 来注册一个新的 ClipboardFormat 了
// (格式的名字,别名……)
ClipboardFormat.addFormat(new AbstractClipboardFormat("CUSTOM", "custom") {
@Override
public ClipboardReader getReader(InputStream inputStream) throws IOException {
return new yourCustomClipboardReader();
}
@Override
public ClipboardWriter getWriter(OutputStream outputStream) throws IOException {
return new yourCustomClipboardWriter();
}
@Override
public boolean isFormat(File file) {
// 如果这个文件使用这个格式的话就返回 true (通常只会检查扩展名)
return file.getName().endsWith(".custom");
}
@Override
public String getExtension() {
return "custom";
}
});
然后格式就可以在游戏中使用了: //schem load <format> <file>
将区域复制到另一个世界
一些关于将一个世界中的区域复制到另一个世界的代码。
如果世界没有在使用中的话,Anvil API 处理的速度比这更快: - https://github.com/c7w/FastAsyncWorldedit/wiki/Anvil-API - 但是使用起来可能会很困难
EditSession copyWorld = new EditSessionBuilder("world").autoQueue(false).build(); // 请查看 https://github.com/boy0001/FastAsyncWorldedit/wiki/WorldEdit-EditSession
EditSession pasteWorld = new EditSessionBuilder("newWorld").build(); // 请查看 https://github.com/boy0001/FastAsyncWorldedit/wiki/WorldEdit-EditSession
Vector pos1 = new Vector(10, 3, 10);
Vector pos2 = new Vector(50, 90, 50);
CuboidRegion copyRegion = new CuboidRegion(pos1, pos2);
BlockArrayClipboard lazyCopy = copyWorld.lazyCopy(copyRegion);
Schematic schem = new Schematic(lazyCopy);
boolean pasteAir = true;
Vector to = new Vector(30, 10, 30);
schem.paste(pasteWorld, to, pasteAir);
pasteWorld.flushQueue();
从图片中创建地形
总览
从图片中创建 命令可以用于从大型的高度图中生成地形。
高度图可以使用 WorldMachine 生成,或在网上找到。
视频: - https://www.youtube.com/watch?v=pPR-w6cRNTc - https://www.youtube.com/watch?v=cJZk1GTig7A
前置插件: - PlotSquared (dev 构建版本)配置文件中 enabled-components.worlds
项设置为 true - 将任何带有你想要的材质的 jar 文件(例如你的 Minecraft 核心文件: .minecraft/versions/<version>/<version>.jar
)放入 FastAsyncWorldEdit/textures
之中
命令用法
<arg>
- 一个必需参数
[arg]
- 一个可选参数
<arg1|arg2>
- 提供的多选一选项
<arg=value>
- 默认或建议你使用的值
开始
要想开始你需要指定想要的高度图(图床链接)和你想要使用的世界。 - 使用高度图: /2 cfi <url>
- 使用固定大小: /2 cfi <width> <length>
查看下面这两条命令,在你完成之后请使用其中的一条: - /2 cfi done - /2 cfi cancel
修改世界
调色板
- 地形能够通过使用图像染色。
- 如果你想要使用颜色的话,你需要预先调整好调色板和其他设置。 #####
/2 cfi paletteComplexity <min=0> <max=100>
- 根据它们的对比度来过滤方块,测量材质中有多少适合那个方块的对比度的颜色。
- 使用
0 50
分别作为最小值与最大值会使用最简单的方块的50%来染色。 #####/2 cfi paletteRandomization <enabled=true>
- 默认是启用的,随机会为方块增加一些随机的颜色来匹配接近于给定图像上的颜色。
- 如果禁用了的话,最接近于方块的颜色总是会被使用。 #####
/2 cfi paletteBlocks <block-list|#clipboard>
- 仅允许某些方块能够用于染色 #####
/2 cfi paletteBiomePriority <percent=50>
- 在使用
blockBiomeColor
时你可以增加或减少生物群系的优先级。 - 默认的值是 50 。 ### 染色命令 #####
/2 cfi color <image-url>
- 仅使用方块为地形染色 #####
/2 cfi glass <image-url>
- 使用玻璃为地形染色(很奇特,但是从另一个角度来看也很奇怪) #####
/2 cfi biomeColor <image-url>
- 使用生物群系为地形染色。
注意:使用生物群系染色不会改变方块: - 如果你将方块更改为除了草方块之外的别的方块你就什么都看不到了。
/2 cfi blockBiomeColor <image-url>
- 使用方块和生物群系来为地形染色。
/2 cfi biome [url|mask] <biome> [white=false]
设置地图某些部分的生物群系。
- 如果使用图片了的话,生物群系有几率被设置,取决于像素点的色彩中白的程度(白色 #FFF = 100% 的几率)
- 是否仅为白色参数决定着是否仅设置图片上的白色值 - 如果使用了蒙版的话,生物群系在任何蒙版应用的地方都会被设置
高度设置
/2 cfi height <url|height>
- 设置地形的高度,取决于高度图图片或数值。
* /2 cfi waterHeight <height=0>
- 改变水平面的生成高度。 - 默认水平面是禁用的(即值为0)
/2 cfi waterId <number-id>
- 使用另外一种方块来代替水方块,例如你可能想使用岩浆。
杂项设定
/2 cfi overlay [url|mask] <pattern> [white=false]
- 改变作为覆盖层的方块(默认:none)
* /2 cfi main [url|mask] <pattern> [white=false]
- 改变作为填充层的方块(默认:stone)
/2 cfi floor [url|mask] <pattern> [white=false]
- 改变作为顶层的方块(默认:grass)
* /2 cfi column [url|mask] <pattern> [white=false]
- 改变顶层和主方块。
其他选项
* /2 cfi caves
- 生成洞穴
* /2 cfi ore[s]
/2 cfi addores
- 增加默认的 Minecraft 原版矿石。
/2 cfi ore <mask> <pattern> <size> <frequency> <rarity> <min-Y> <max-Y>
- 使用给定的模板和设置来生成矿石。
/2 cfi schem [url] <mask> <file|folder|url> <rarity> <distance> <rotate>
- 在地形上使用schematic文件。
- 改变蒙版(例如:角蒙版)来仅在某些特殊的位置放置schematic文件中的内容。
- 稀有程度是一个在 0 到 100 之间的值。
/2 cfi blockBiomeColor <image-url>
- 使用方块和生物群系来为地形染色。
* /2 cfi biome [url|mask] <biome> [white=false]
设置地图某些部分的生物群系。
- 如果使用图片了的话,生物群系有几率被设置,取决于像素点的色彩中白的程度(白色 #FFF = 100% 的几率)
- 是否仅为白色参数决定着是否仅设置图片上的白色值 - 如果使用了蒙版的话,生物群系在任何蒙版应用的地方都会被设置
高度设置
* /2 cfi height <url|height>
- 设置地形的高度,取决于高度图图片或数值。
/2 cfi waterHeight <height=0>
- 改变水平面的生成高度。
- 默认水平面是禁用的(即值为0)
/2 cfi waterId <number-id>
- 使用另外一种方块来代替水方块,例如你可能想使用岩浆。
杂项设定
* /2 cfi overlay [url|mask] <pattern> [white=false]
- 改变作为覆盖层的方块(默认:none)
/2 cfi main [url|mask] <pattern> [white=false]
- 改变作为填充层的方块(默认:stone)
/2 cfi floor [url|mask] <pattern> [white=false]
- 改变作为顶层的方块(默认:grass)
* /2 cfi column [url|mask] <pattern> [white=false]
- 改变顶层和主方块。
其他选项
* /2 cfi caves
- 生成洞穴 * /2 cfi ore[s]
/2 cfi addores
- 增加默认的 Minecraft 原版矿石。
* /2 cfi ore <mask> <pattern> <size> <frequency> <rarity> <min-Y> <max-Y>
- 使用给定的模板和设置来生成矿石。
* /2 cfi schem [url] <mask> <file|folder|url> <rarity> <distance> <rotate>
- 在地形上使用schematic文件。
- 改变蒙版(例如:角蒙版)来仅在某些特殊的位置放置schematic文件中的内容。
- 稀有程度是一个在 0 到 100 之间的值。
FawePlayer
要想得到new Player的话请使用 FawePlayer.wrap(玩家, uuid, 用户名, 等等)
这里是方法 - getWorld - getLocation - sendTitle - resetTitle - getLimit - getName - getUUID - hasPermission - setPermission - sendMessage - executeCommand - getPlayer - getSession - getSelection - setSelection - getCurrentRegions - getLargestRegion - hasWorldEditBypass - setMeta - getMeta - deleteMeta - getNewEditSession - runIfFree - runAsyncIfFree
FaweQueue
免责声明
FaweQueue 是修改世界最基础的类,当正确使用时处理速度很快。但替代使用这个,我推荐使用 Operations 或EditSession,因为它们可以将很抽象的任务简化,并且相对于FaweQueue的普通方法而言,它们可以提供更好的表现。如果你想让更能适应 Bukkit API 的话,你也可以使用 AsyncWorld 。
FaweQueue
FaweQueue 是从异步线程中修改世界的基础队列 - 使用它有效率地修改整个区块或其中的个别方块 - 查看 EditSession 或 AsyncWorld ,这些使用起来更简单,但是速度会慢些 - 如果你想控制更多的话,队列(queue)能够强制转换为 NMSMappedFaweQueue.
// 自动进入队列意味着方块会在它们被刷新之前开始放置
FaweQueue queue = FaweAPI.createQueue(worldName, autoQueue);
queue.setBlock(0, 0, 0, id, data);
queue.setBiome(0, 0, biome);
// 设置整个区块
FaweChunk<?> chunk = queue.getFaweChunk(5, 5);
chunk.fill(id, data);
chunk.addToQueue();
// 为位置重复相同任务
chunk = chunk.copy(true);
chunk.setLoc(queue, 5, 6);
chunk.addToQueue();
NMS 方法
对于一些支持的平台也有更多方法。你可以通过将 FaweQueue
类型来强制转换为 NMSMappedFaweQueue
来访问这些。 更多信息: https://github.com/c7w/FastAsyncWorldedit/wiki/Light-API
Fawe-TaskManager
异步任务
很基础的东西,但这是你可以使用 FAWE TaskManager 来运行异步任务的方法。
TaskManager.IMP.async(new Runnable() {
@Override
public void run() {
// Do stuff here?
}
});
同步任务
使用 FAWE TaskManager 你可以切换使用主线程(原来为异步处理)然后执行任务。
// 从异步线程中获得玩家背包内容
// 例如:方法异步处理不安全的话
PlayerInventory inventory = TaskManager.IMP.sync(new RunnableVal<PlayerInventory>() {
@Override
public void run(PlayerInventory value) {
this.value = player.getInventory();
}
});
什么时候使用这个? - 你想调用的方法使用异步处理不安全 - 使用异步处理任务会有性能问题
Jobs-API
一些类似于 Job API 的东西。
SetQueue
这个类中有成队列的本地队列。每个本地队列都是由成队列的区块改变组成的可能与 EditSession 相关联,它可能与一个玩家有关。
SetQueue 会检测激活和未激活的队列:
// 激活的队列已经完成了等候
Collection<FaweQueue> active = SetQueue.IMP.getActiveQueues();
// 未激活的队列可能还在等候其他区块改变或其他任务
Collection<FaweQueue> inactive = SetQueue.IMP.getInactiveQueues();
Collection<FaweQueue> all = SetQueue.IMP.getAllQueues();
示例:获得一名玩家等候队列中的方块!
你可以从这里获得一名玩家当前运行的 EditSessions :FawePlayer#getTrackedSessions
。
在每个 EditSession 中你能获得改变的方块: EditSession#getLimitUsed
,但是这不会一定对应于当前队列中的方块(当队列任务完成后才能分配)。
你也可以通过使用 FaweQueue (EditSession#getQueue
), 你可以获得激活的区块: FaweQueue#getFaweChunks
, 然后每个激活的区块都可以强制转换类型为 CharFaweChunk
然后使用 CharFaweChunk#getTotalCount
撤销一次修改
在获取当前的 EditSession 之后,只要使用 EditSession#cancel
就好了。
Light-API
与 FaweQueue 有关联
获取当前的 NMS 队列
boolean autoQueue = false;
NMSMappedFaweQueue nmsQueue = (NMSMappedFaweQueue) SetQueue.IMP.getNewQueue("worldName", true, autoQueue);
相关联的方法 - relight(int x, int y, int z) - relightBlock(int x, int y, int z) - relightSky(int x, int y, int z) - setSkyLight(int x, int y, int z, int value) - setBlockLight(int x, int y, int z, int value)
相关联的类 - FaweQueue - MappedFaweQueue - NMSMappedFaweQueue