• 欢迎来到Minecraft插件百科!
  • 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
  • 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289

FastAsyncWorldEdit:修订间差异

来自Minecraft插件百科
跳转到导航 跳转到搜索
C7w留言 | 贡献
第1,255行: 第1,255行:
     # 大型的编辑是否需要确认(需要区块数目大于16384)
     # 大型的编辑是否需要确认(需要区块数目大于16384)
     confirm-large: true</pre>
     confirm-large: true</pre>
= Anvil-API =
Anvil API 是用来修改未读取的 MCA 文件的。( <code>&lt;world&gt;/region</code> )
有关的包: https://github.com/boy0001/FastAsyncWorldedit/tree/master/core/src/main/java/com/boydti/fawe/jnbt/anvil # 使用 FaweQueue
<source lang="java">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来做些什么</source>
= 创建 MCA 文件 =
请查看 [https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/jnbt/anvil/HeightMapMCAGenerator.java HeightMapMCAGenerator]
<source lang="java">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();</source>
== 使用 EditSession ==
<source lang="java">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 来做些什么(世界中没有被创建的区域不能被修改)</source>
== 替换方块 ==
<source lang="java">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(...) 能够修改指定方块的类型</source>
== 删除指定半径外的区块 ==
<source lang="java">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;
    }
});</source>
= API =
== 需要帮助? ==
如果你在写代码这方面需要帮助的话,请随意在 [http://webchat.esper.net/?nick=&channels=IntellectualCrafters&fg_color=000&fg_sec_color=000&bg_color=FFF IRC] 这里询问。
== 移植 WorldEdit API 的代码到 FAWE 中 ==
首先,FAWE 不会修改 WorldEdit API 的表现,不过安装 FAWE 之后已经存在的代码会运行的更快。
使代码(使用 WorldEdit API的相关代码)异步工作和将它放入异步线程中一样简单(例如:使用Bukkit 的 scheduler)。
即便如此,FAWE API 也提供了目前 WorldEdit 所不能做到的一些额外功能。下面是一些 WorldEdit 和 FAWE 的例子:
== Maven ==
储存库(Repository): <code>http://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/</code><br />
前置(Dependency): <code>com.boydti:fawe-api:&lt;version&gt;</code> 或 <code>com.boydti:fawe-api:latest</code><br />
# Gradle 你能够使用Gradle来为FAWE编码,它已经在本储存库中了:
<pre>$ gradlew setupDecompWorkspace
$ gradlew build</pre>
=== 线程 ===
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Some-tips-when-using-the-FAWE-API FAWE 的性能提示]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Fawe-TaskManager#sync-task 使用 FAWE TaskManager 来运行同步/异步任务]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/TaskBuilder 使用 FAWE TaskBuilder 来分离复杂任务]
=== 玩家 ===
* [https://github.com/c7w/FastAsyncWorldedit/wiki/FawePlayer FawePlayer]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/WorldEdit-World-Player WorldEdit 玩家]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Jobs-API 玩家任务 API]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Progress-API 玩家进度 API]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Region-restriction-API 玩家区域限制]
=== 异步修改世界(或是读取世界) ===
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Anvil-API Anvil API]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/WorldEdit-World-Player WorldEdit 世界]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/WorldEdit-EditSession EditSession]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/AsyncWorld Bukkit API 封包器]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/FaweQueue FaweQueue]
=== NBT 与格式 ===
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Pasting-a-schematic 剪切板的粘贴]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/NBT-stream-API NBT 代码相关 API]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Clipboard-API 自定义剪切板格式]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Recovering-corrupt-NBT-files-(MCA-Schematic-etc.) 恢复错误的 NBT]
=== NMS 相关概念 ===
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Light-API Light API]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/FaweQueue#nms-methods NMSMappedFaweQueue]<br />
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Packet-sending 发包]
=== 网页 ===
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Web-API 网页 API]
=== 其他功能 ===
* [https://github.com/c7w/FastAsyncWorldedit/wiki/TextureUtil---block-and-biome-coloring 方块和生物群系的颜色]
=== 延展特性 ===
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Registering-Custom-Masks,-Patterns-and-Transforms 增加自定义的任务,模型或变换参数]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Registering-custom-brushes-or-commands 增加自定义笔刷和命令]
* [https://github.com/c7w/FastAsyncWorldedit/wiki/Clipboard-API 增加自定义剪切板格式]
== FaweAPI 的类: ==
https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/FaweAPI.java

2017年8月15日 (二) 04:37的版本

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-diskuse-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

目录

点击类型的名字去查看该类型下命令的列表,或者点击 更多信息 获取更多详细信息

* 生成命令 (创建结构或特性: 更多信息

未分类的命令

别称 权限 标记 使用方法
//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-durationchunk-inactivity 的值



Super Pickaxe 命令 [编辑|回到顶部]

(超级镐子相关命令: 更多信息)


/sp recur <radius>

权限worldedit.superpickaxe.recursive
描述: 启用递归超级镐子模式

  • /sp area <radius> 权限worldedit.superpickaxe.area

描述: 启用区域超级镐子模式

  • /sp single 权限worldedit.superpickaxe

描述: 启用单个方块的超级镐子模式



Navigation 命令 [编辑|回到顶部]

(关于玩家在地面上移动的相关命令: 更多信息)


/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.bypassfawe.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 文件

请查看 HeightMapMCAGenerator

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

  1. Gradle 你能够使用Gradle来为FAWE编码,它已经在本储存库中了:
$ gradlew setupDecompWorkspace
$ gradlew build

线程

玩家

异步修改世界(或是读取世界)

NBT 与格式

NMS 相关概念

网页

其他功能

延展特性

FaweAPI 的类:

https://github.com/boy0001/FastAsyncWorldedit/blob/master/core/src/main/java/com/boydti/fawe/FaweAPI.java