WPSCript API
概述
脚本(Script)与 WorldPainter 交互的方式是通过一个名为wp
的上下文对象,该对象以函数或方法的形式导出许多操作(取决于您的脚本语言)。这些操作遵循“建造者模式”或“链式调用模式”,这意味着您通过连续链接一个或多个方法调用来设置参数,然后调用go()
来实际执行该操作,这些操作可能返回也可能不返回值。例如,在 JavaScript 中:
var world = wp.getWorld()
.fromFile('path/to/world/worldname.world')
.go();
这条语句从指定文件加载 WorldPainter 世界并将其存储在名为world
的变量中,然后您可以在进一步的操作中使用该变量来引用加载的世界。
支持的脚本语言
取决于Java,一般包括JavaScript、Scala、JRuby、Jython、Groovy等;WP将根据您脚本文件的后缀名来自动选取并初始化脚本引擎;
本文将主要使用JavaScript来做代码演示。
不要忘记在结尾处调用go()
再说一遍:每个操作都以调用.go()
结束,它将实际执行操作并返回结果(如果有)。别忘了,不然什么都不会发生!
命令行参数、控制台输出
脚本的标准输入输出被重定向至脚本运行窗口中的文本框:
标准输出被重定向到Output文本框,使用print()
函数将内容打印到此。
标准输出被重定向到Parameters文本框,在这里输入单行多个参数,以空格分隔;您可以在脚本中通过arguments
或argv
数组访问调用脚本时输入的命令行参数(两者都可用;第一个命令行参数在arguments[0]
或argv[1]
中;argv[0]
包含脚本的名称(arguments
中没有这个元素)) 。
WPSCript 中预先注入的变量
一些全局变量被提前注入了脚本引擎中,因此您可以直接在脚本中调用它们,无须声明:
wp
:wp脚本上下文对象,提供引入其他操作对象的接口。world
:当前加载的世界对象,脚本可以通过它修改当前加载的世界。dimension
:当前选定的维度对象,脚本可以通过它选定当前选定的维度。argc
:整形变量,命令行参数个数+1,argv
的数组长度。argv
:字符串数组,第一个元素是脚本名称,后跟所有命令行参数。arguments
:字符串数组,包含所有命令行参数。params
:字符串-对象字典,包含所有通过UI输入参数。DataSize
:字符串-对象字典,获取WP支持的四种层类型的枚举类元素,它们支持toString(int value)
方法,输出值到对于表示的字符串;关于这些层的介绍,另请见层类型:BIT
:开/关层,范围为0~1。NIBBLE
:连续层,范围为0~15。BYTE
:直接映射层,范围为0~255。BIT_PER_CHUNK
:区块开/关层,范围为0~1。NONE
:空位或其他标记。
scriptDir
:字符串,该脚本所在文件夹的绝对文件路径。
wp
对象上可用的操作
wp
本质上是一个ScriptingContext
类型的对象,该类型提供如下方法:
public String getVersion()
public GetWorldOp getWorld()
public GetLayerOp getLayer()
public GetTerrainOp getTerrain()
public ImportHeightMapOp createWorld()
public ExportWorldOp exportWorld(World2 world)
public MergeWorldOp mergeWorld() //TODO
public SaveWorldOp saveWorld(World2 world)
public GetHeightMapOp getHeightMap()
public MappingOp applyHeightMap(HeightMap heightMap)
public MappingOp applyLayer(Layer layer)
public MappingOp applyTerrain(int terrainIndex)
public InstallCustomTerrainOp installCustomTerrain(MixedMaterial terrain)
public CreateFilterOp createFilter()
public GetPlatformOp getMapFormat()
从上述接口可以看出,wp
不直接进行任何操作,也不提供go()
函数,它返回其他操作对象,并委托这些操作对象来完成操作的设置及执行。
var version = wp.getVersion()
//@return String 返回版本号字符串
print("Current version of WP: " + version)
GetWorldOp
对象上可用的操作
GetWorldOp
对象用以完成获取世界对象的操作,该对象可以从wp.getWorld()
中获取,该类型提供如下方法:
public GetWorldOp fromFile(String fileName)
public World2 go()
加载世界
从磁盘加载 WorldPainter 世界:
var world = wp.getWorld()
//@return 返回一个新的GetWorldOp对象
.fromFile('path/to/world/myworld.world')
//@return this
//@param fileName 要加载的世界的文件名;可以是绝对目录或相对于当前目录
.go();
//@return world2对象
SaveWorldOp
对象上可用的操作
SaveWorldOp
对象用以完成保存世界的操作,该对象可以从wp.saveWorld()
中获取,该类型提供如下方法:
public SaveWorldOp toFile(String fileName)
public Void go()
保存世界
将 WorldPainter 世界保存到磁盘:
wp.saveWorld(world)
//@return 返回一个新的SaveWorldOp对象
//@param world 要保存的世界对象,见“加载世界”
.toFile('path/to/world/myworld.world')
//@return this
//@param fileName 保存世界的文件名。如果它已经存在,将使用运行脚本的用户的 !WorldPainter 配置中存储的备份设置自动进行备份
.go();
//@return void
ExportWorld
对象上可用的操作
ExportWorld
对象用以完成导出世界的操作,该对象可以从wp.exportWorld()
中获取,该类型提供如下方法:
public ExportWorldOp toDirectory(String directory)
public Void go()
导出世界
将 WorldPainter 世界导出为 Minecraft 地图:
wp.exportWorld(world)
//@return 返回一个新的ExportWorld对象
//@param world 要导出的世界对象,见“加载世界”
.toDirectory('path/to/saves')
//将在指定目录中自动创建一个名为 world 的目录。如果具有该名称的目录已存在,则会自动备份
//@return this
//@param fileName 导出世界的目录,不应包含世界名称
.go();
//@return void
GetLayerOp
对象上可用的操作
GetLayerOp
对象用以完成获取图层对象的操作,该对象可以从wp.getLayer()
中获取,该类型提供如下方法:
public GetLayerOp fromFile(String fileName)
public GetLayerOp fromWorld(World2 world)
public GetLayerOp withName(String name)
public Layer go()
加载图层
获取标准 WorldPainter 层:
var layer = wp.getLayer()
//@return 返回一个新的GetLayerOp对象
.withName('Frost')
//@return this
//@param name 标准层的名称
.go();
//@return 返回Layer对象
从 WorldPainter 世界获取图层:
var layer = wp.getLayer()
//@return 返回一个新的GetLayerOp对象
.fromWorld(world)
//@return this
//@param world 见“导入世界”
.withName('My Layer')
//@return this
//@param name 层的名称
.go();
//@return 返回Layer对象
从 WorldPainter 导出的 .layer 文件加载图层:
var layer = wp.getLayer()
.fromFile('path/to/layer/mylayer.layer')
//该设置与fromWorld()及withName()互斥
//@return this
//@param fileName 要加载的图层的文件名
.go();
//@return 返回Layer对象
GetTerrainOp
对象上可用的操作
GetTerrainOp
对象用以完成从文件读取自定义地表材质的操作,该对象可以从wp.getTerrain()
中获取,该类型提供如下方法:
public GetTerrainOp fromFile(String fileName)
public MixedMaterial go()
加载自定义地表材质
从 WorldPainter 导出的 .terrain 文件加载自定义地表材质:
var terrain = wp.getTerrain()
//@return 返回一个新的GetLayerOp对象
.fromFile('path/to/terrain/myterrain.terrain')
//@return this
//@param fileName 要加载的地表材质的文件名
.go();
//@return 返回MixedMaterial对象
请注意,要实际使用自定义地表材质,您必须首先将其安装在世界上!请参阅下文了解“安装自定义地表材质”操作。
InstallCustomTerrainOp
对象上可用的操作
InstallCustomTerrainOp
对象用以完成从文件读取自定义地表材质的操作,该对象可以从wp.installCustomTerrain()
中获取,该类型提供如下方法:
public InstallCustomTerrainOp toWorld(World2 world)
public InstallCustomTerrainOp inSlot(int index)
public Integer go()
将自定义地表材质安装到世界上
在实际使用自定义地表材质之前,您必须首先使用以下操作将其安装在世界上:
var customTerrainIndex = wp.installCustomTerrain(terrain)
//@return 返回一个新的InstallCustomTerrainOp对象
//@param terrain 要安装在世界上的自定义地表材质。请参阅“加载自定义地形”
.toWorld(world)
//@return this
//@param world 要安装自定义地形的世界。请参阅“加载世界”
.inSlot(1)
// 可选的;将自定义地表材质安装到索引号处的槽位,如果未指定,将使用第一个空闲插槽。如果没有空闲槽位,则会抛出异常
//@param index 用于安装地形的自定义地形槽索引号,从 1 到 96(含)。
.go();
//@return index 返回自定义地表材质的索引号,用于使用其他操作以实际应用此自定义地表材质
GetHeightMapOp
对象上可用的操作
GetHeightMapOp
对象用以完成从文件读取高度图的操作,该对象可以从wp.getHeightMap()
中获取,该类型提供如下方法:
public GetHeightMapOp fromFile(String fileName)
public GetHeightMapOp selectRedChannel()
public GetHeightMapOp selectGreenChannel()
public GetHeightMapOp selectBlueChannel()
public HeightMap go()
加载高度图
有多种操作需要高度图作为输入。加载方法如下:
var heightMap = wp.getHeightMap()
//@return 返回一个新的GetHeightMapOp对象
.fromFile ( 'path/to/heightmap/myheightmap.png' )
//设置要加载的文件名,支持的格式取决于 Java 平台,但通常至少包括 PNG 和 TIFF
//@return this
//@param fileName 要加载的高度图的文件名。
.selectRedChannel()
//可选的;默认置位的;如果图像不是灰度图像,您可以调用 selectRedChannel()、selectGreenChannel() 或 selectBlueChannel() 之一来指示应使用哪个通道读取值,默认将采用红色通道;与selectGreenChannel()和selectBlueChannel()互斥
//@return this
.selectGreenChannel()
//可选的;如果图像不是灰度图像,您可以调用 selectRedChannel()、selectGreenChannel() 或 selectBlueChannel() 之一来指示应使用哪个通道读取值,默认将采用红色通道;与selectRedChannel()和selectBlueChannel()互斥
//@return this
.selectBlueChannel()
//可选的;如果图像不是灰度图像,您可以调用 selectRedChannel()、selectGreenChannel() 或 selectBlueChannel() 之一来指示应使用哪个通道读取值,默认将采用红色通道;与selectGreenChannel()和selectRedChannel()互斥
//@return this
.go();
//@return HeightMap 返回加载的高度图对象以供其他操作使用
GetPlatformOp
对象上可用的操作
GetPlatformOp
对象用以完成获取地图格式对象的操作,该对象可以从wp.getMapFormat()
中获取,该类型提供如下方法:
public GetPlatformOp withId(String id)
public GetPlatformOp withName(String name)
public Platform go()
加载地图格式
为了能够指定新创建的世界的地图格式,您需要获取对地图格式的引用,如下所示:
var mapFormat = wp.getMapFormat()
//@return 返回一个新的GetPlatformOp对象
.withId('id')
//通过ID获取地图格式对象;与withName()互斥
//@return this
//@param id 地图格式的ID字符串,可用的ID在下表中列出
.withName('name')
//通过name获取地图格式对象;与withId()互斥
//@return this
//@param name 地图格式的Name字符串,可用的Name在下表中列出
.go();
//@return 返回选定的Platform对象
请注意,建议使用 ID,因为它可以保证稳定,而名称可能会因版本而异。以下是 WorldPainter 目前支持的地图格式的 ID:
ID | Name |
---|---|
org.pepsoft.mcregion | Minecraft 1.1 (MCRegion) |
org.pepsoft.anvil | Minecraft 1.2 - 1.12 |
org.pepsoft.anvil.1.13 | Minecraft 1.15 - 1.16 |
org.pepsoft.anvil.1.17 | Minecraft 1.17 |
org.pepsoft.anvil.1.18 | Minecraft 1.18 |
org.pepsoft.anvil.1.19 | Minecraft 1.19 or later |
ImportHeightMapOp
对象上可用的操作
ImportHeightMapOp
对象用以完成从高度图创建新的世界的操作,该对象可以从wp.createWorld()
中获取,该类型提供如下方法:
public ImportHeightMapOp fromHeightMap(HeightMap heightMap)
public ImportHeightMapOp scale(int scale)
public ImportHeightMapOp shift(int x, int y)
public ImportHeightMapOp fromLevels(int imageLow, int imageHigh)
public ImportHeightMapOp toLevels(int worldLow, int worldHigh)
public ImportHeightMapOp withWaterLevel(int level)
public ImportHeightMapOp withMapFormat(Platform platform)
public ImportHeightMapOp withLowerBuildLimit(int lowerBuildLimit)
public ImportHeightMapOp withUpperBuildLimit(int upperBuildLimit)
public World2 go()
从高度图创建世界
从高度图创建一个新世界:
var world = wp.createWorld()
//@return 返回一个新的ImportHeightMapOp对象
.fromHeightMap(heightMap)
//@return this
//@param heightMap 要加载的高度图,见“加载高度图”
.scale(100)
//可选的;设置高度图缩放的百分比
//@return this
//@param scale 要缩放的百分比,默认值:100%
.shift(0, 0)
//可选的;高度图应分别向东西方向和向南北方向位移的块数(负数向西和向北移动);默认值:0, 0
//@return this
//@param x 高度图向东西方向位移的块数,默认值:0
//@param y 高度图向南北方向位移的块数,默认值:0
.fromLevels(0, 255).toLevels(0, 255)
//可选的;指定图像值应如何映射到地面高度。第一对值是图像值范围的下限和上限;第二对值是映射到地面高度值范围的上限和下限。默认值:一一映射
//@return this
//@param imageLow 图像值范围的下限
//@param imageHigh 图像值范围的上限
//@param worldLow 图像值范围的下限
//@param worldHigh 图像值范围的上限
.withWaterLevel(62)
//可选的;设置新世界的默认海平面
//@return this
//@param level 要设置海平面高度,默认值:62
.withMapFormat(mapFormat)
//可选的;设置新世界的地图格式。
//@return this
//@param platform 要设置地图格式,见“获取地图格式”,默认值:WorldPainter Preferences中配置的默认地图格式
.withLowerBuildLimit(-64)
//可选的;设置新世界的高度构建下限(包含该值在内)
//@return this
//@param lowerBuildLimit 要设置构建下限,默认值:设置的地图格式的默认构建下限
.withUpperBuildLimit(320)
//可选的;设置新世界的高度构建上限(不包含该值在内)
//@return this
//@param upperBuildLimit 要设置构建上限,默认值:设置的地图格式的默认构建上限
.go();
//@return World2 返回创建的世界对象以供导出、保存或在其他操作中使用
请注意,WorldPainter 支持 16 位高度图!您可以导入它们来创建具有高分辨率高度信息的世界,这将使光滑的雪看起来更好,编辑工作更顺利。您需要告诉 WorldPainter 将高度图的完整范围(或任何其他所需的范围)映射到世界高度的完整范围,通过设置 fromLevels() 和 toLevels() 如下:
.fromLevels(0, 65535).toLevels(0, 255)
MappingOp
对象上可用的操作
MappingOp
对象用以完成将高度图应用到层的操作,该对象可以从wp.applyHeightMap()
、wp.applyLayer()
、wp.applyTerrain()
中获取,该类型提供如下方法:
public MappingOp applyToLayer(Layer layer)
public MappingOp applyToTerrain()
public MappingOp toWorld(World2 world)
public MappingOp applyToSurface()
public MappingOp applyToNether()
public MappingOp applyToEnd()
public MappingOp applyToSurfaceCeiling()
public MappingOp applyToNetherCeiling()
public MappingOp applyToEndCeiling()
public MappingOp fromLevel(int level)
public MappingOp fromLevels(int lower, int upper)
public MappingOp fromColour(int red, int green, int blue)
public MappingOp fromColour(int alpha, int red, int green, int blue)
public MappingOp toLevel(int level)
public MappingOp toTerrain(int terrain)
public MappingOp toLevels(int lower, int upper)
public MappingOp setAlways()
public MappingOp setWhenLower()
public MappingOp setWhenHigher()
public MappingOp scale(int scale)
public MappingOp shift(int x, int y)
public MappingOp withFilter(Filter filter)
public Void go()
将高度图应用为层
要将高度图作为图层应用到世界:
wp.applyHeightMap(heightMap)
//@return 返回一个新的MappingOp对象
//@param heightMap 要应用图层的高度图,见“加载高度图”
.toWorld(world)
//@return this
//@param world 要应用高度图的世界,见“加载世界”
.withFilter(filter)
//可选的;指定应用图层的应用位置的条件限制;有关创建过滤器的详细信息,请参阅下文
//@return this
//@param filter 要使用的过滤器,见“创建过滤器”
.applyToSurface()
//可选的;默认置位的;指示应用于该世界的主世界地表维度;与applyToNether()和applyToEnd()互斥
//@return this
.applyToNether()
//可选的;指示应用于该世界的下界维度;与applyToSurface()和applyToEnd()互斥
//@return this
.applyToEnd()
//可选的;指示应用于该世界的末地维度;与applyToSurface()和applyToNether()互斥
//@return this
.scale(100)
//可选的;设置高度图缩放的百分比
//@return this
//@param scale 要缩放的百分比,默认值:100%
.shift(0, 0)
//可选的;高度图应分别向东西方向和向南北方向位移的块数(负数向西和向北移动);默认值:0, 0
//@return this
//@param x 高度图向东西方向位移的块数,默认值:0
//@param y 高度图向南北方向位移的块数,默认值:0
.applyToLayer(layer)
//设置高度图要应用到的图层
//@return this
//@param layer 要应用到的图层,见“加载图层”
.fromLevel(0).toLevel(0)
//可选的;可重复的;指定图像中的单个值必须映射到单层强度(见下文)
//@param levelFrom 指定的图像值
//@param levelTo 指定的图层的目标值
.fromLevels(0, 255).toLevel(0)
//可选的;可重复的;指定图像中的一系列值必须映射到单层强度(见下文)
//@param lowerLevelFrom 指定的图像值区间下界
//@param upperLevelFrom 指定的图像值区间上界
//@param levelTo 指定的图层的目标值
.fromLevels(0, 255).toLevels(0, 255)
//可选的;可重复的;指定图像中的一系列值必须映射到一系列图层强度(见下文)
//@param lowerLevelFrom 指定的图像值区间下界
//@param upperLevelFrom 指定的图像值区间上界
//@param lowerLevelTo 指定的图层的目标值区间下界
//@param upperLevelTo 指定的图层的目标值区间上界
.fromColour(0, 0, 0).toLevel(0)
//可选的;可重复的;规定图像中的单一颜色(值在0到255(含)范围内的红、绿和蓝分量的形式);必须映射到单层强度(见下文);假设 alpha 值是 255(完全不透明)
//@param lowerLevelFrom 指定的图像值区间下界
//@param upperLevelFrom 指定的图像值区间上界
//@param lowerLevelTo 指定的图层的目标值区间下界
//@param upperLevelTo 指定的图层的目标值区间上界
.fromColour(0, 0, 0, 0).toLevel(0)
//可选的;可重复的;规定图像中的单一颜色(值在0到255(含)范围内的alpha、红、绿和蓝分量的形式)必须映射到单层强度(见下文)
//@param lowerLevelFrom 指定的图像值区间下界
//@param upperLevelFrom 指定的图像值区间上界
//@param lowerLevelTo 指定的图层的目标值区间下界
//@param upperLevelTo 指定的图层的目标值区间上界
.setAlways()
//可选的;默认置位的;指示旧的图层始终被覆盖替换为新图层,世界上原有的图层将被删除;与setWhenLower()和setWhenHigher()互斥
//@return this
.setWhenLower()
//可选的;指示只有当新图层中的值低于世界上已有的值时,才将覆盖替换为新的图层强度;与setAlways()和setWhenHigher()互斥
//@return this
.setWhenHigher()
//可选的;指示只有新图层中的值高于世界上已有的值时,才将覆盖替换为新的图层强度;与setAlways()和setWhenLower()互斥
//@return this
.go();
//return Void
关于映射:
您的映射源可以使用灰度值(使用 fromLevel() 和 fromLevels())或颜色值(使用 fromColour()),但不能混合使用两者。显然,仅当高度图源自彩色图像时,映射颜色值才有用。请注意,颜色仅与指定的完全匹配。稍微不同的颜色不匹配。因此,您必须确保输入图像仅包含离散颜色的实心区域,并且没有抗锯齿、平滑、颜色混合、渐变等。
您必须使用 fromLevel(s)/fromColour(s)/toLevel(s) 等设置来至少指定一次映射关系。值的映射关系指定应为哪些输入值设置哪些层强度。任何未映射的输入值都将被忽略,即现有图层强度(如果有)将在这些位置保持不变。要正确设置映射,您必须知道要映射到的图层类型(即上述设置的layer
变量的图层类型)要使用哪些目标值。到目前为止,共有三种图层类型:
开/关层
所谓的开/关或真/假或 1 位层没有强度。事实上,它们对于每个坐标要么打开,要么关闭。此类图层的示例有:Frost 图层、Void 图层、自定义地表覆盖层和自定义洞穴层。
对于这些层,目标值零表示“关闭”,任何其他值表示“打开”。换句话说,如果您使用默认映射,则高度图不完全黑色的任何区域都将导致应用该图层。
事实上还有一种区块开/关层,类似于开/关层,只不过以区块作为最小标记单位,此类图层的示例有:Read Only 图层。
连续层
所谓的连续层或 4 位层具有强度。在 GUI 中,强度显示为 0% 到 100% 之间的百分比,但从技术上讲,这些层只有 16 个离散的强度,从 0 到 15。零意味着该层不存在;1对应于1%、8对应于50%和15对应于100%。此类图层的示例包括:Caverns 和 Chasms 图层、标准树图层、Resources 图层、自定义模型层、自定义地下覆盖层图层和结合层。
因此,对于这些层,目标值必须介于 0 到 15(含)之间。如果使用默认映射,任何高度图全黑的区域都不会设置图层;当高度图值在 1 到 14(含)之间时,图层将设置为从 1% 到 93% 的百分比,而当高度图值是 15(仍然很暗)或更高时,图层将被设置为 100% 。
直接映射层
这些图层没有强度,但图层值直接对应于任意概念,例如颜色或生物群落。此类层的示例包括生物群落层和标记层。
什么样的映射对这些层有意义取决于高度图的类型。例如,如果它是真正的高度图(即它对应于表面高度),那么您可以使用它将不同的高度范围映射到不同的生物群系,并且使用范围设置器(fromLevels().toLevel() 和fromLevels().toLevels()) 设置映射。
如果“高度图”是一个位图或掩码,它直接指示必须使用哪些生物群落,那么使用范围设置器就没有意义,最好使用一对一设置器( fromLevel().toLevel()) )一一地设置“高度图”值到生物群落或颜色的每个映射。
对于 Biomes 图层,其目标值是 Minecraft 生物群落 ID,您可以在Minecraft wiki上找到它。要将生物群落重置为“自动”,请将图层值设置为 255。
对于标记层,目标值必须介于0到15之间。0表示该图层不应该存在;其他值表示单独的颜色标记。有关颜色映射的概述, 请参阅此页。
将高度图应用到地表材质
要将高度图应用到世界作为地表材质:
wp.applyHeightMap(heightMap)
//@return 返回一个新的MappingOp对象
//@param heightMap 要应用图层的高度图,见“加载高度图”
.toWorld(world)
//@return this
//@param world 要应用高度图的世界,见“加载世界”
.withFilter(filter)
//可选的;指定应用图层的应用位置的条件限制;有关创建过滤器的详细信息,请参阅下文
//@return this
//@param filter 要使用的过滤器,见“创建过滤器”
.applyToSurface()
//可选的;默认置位的;指示应用于该世界的主世界地表维度;与applyToNether()和applyToEnd()互斥
//@return this
.applyToNether()
//可选的;指示应用于该世界的下界维度;与applyToSurface()和applyToEnd()互斥
//@return this
.applyToEnd()
//可选的;指示应用于该世界的末地维度;与applyToSurface()和applyToNether()互斥
//@return this
.scale(100)
//可选的;设置高度图缩放的百分比
//@return this
//@param scale 要缩放的百分比,默认值:100%
.shift(0, 0)
//可选的;高度图应分别向东西方向和向南北方向位移的块数(负数向西和向北移动);默认值:0, 0
//@return this
//@param x 高度图向东西方向位移的块数,默认值:0
//@param y 高度图向南北方向位移的块数,默认值:0
.applyToTerrain()
//标记要将高度图应用于地表材质
//@return this
.fromLevel(0).toLevel(0)
//可选的;可重复的;指定图像中的单个值必须映射到单层强度(见下文)
//@param levelFrom 指定的图像值
//@param levelTo 指定的图层的目标值
.fromLevels(0, 255).toLevel(0)
//可选的;可重复的;指定图像中的一系列值必须映射到单层强度(见下文)
//@param lowerLevelFrom 指定的图像值区间下界
//@param upperLevelFrom 指定的图像值区间上界
//@param levelTo 指定的图层的目标值
.fromColour(0, 0, 0).toLevel(0)
//可选的;可重复的;规定图像中的单一颜色(值在0到255(含)范围内的红、绿和蓝分量的形式);必须映射到单层强度(见下文);假设 alpha 值是 255(完全不透明)
//@param lowerLevelFrom 指定的图像值区间下界
//@param upperLevelFrom 指定的图像值区间上界
//@param lowerLevelTo 指定的图层的目标值区间下界
//@param upperLevelTo 指定的图层的目标值区间上界
.fromColour(0, 0, 0, 0).toLevel(0)
//可选的;可重复的;规定图像中的单一颜色(值在0到255(含)范围内的alpha、红、绿和蓝分量的形式)必须映射到单层强度(见下文)
//@param lowerLevelFrom 指定的图像值区间下界
//@param upperLevelFrom 指定的图像值区间上界
//@param lowerLevelTo 指定的图层的目标值区间下界
//@param upperLevelTo 指定的图层的目标值区间上界
.go();
//@return Void
关于映射:
您的映射源可以使用灰度值(使用 fromLevel() 和 fromLevels())或颜色值(使用 fromColour()),但不能混合使用两者。显然,仅当高度图源自彩色图像时,映射颜色值才有用。请注意,颜色仅与指定的完全匹配。稍微不同的颜色不匹配。因此,您必须确保输入图像仅包含离散颜色的实心区域,并且没有抗锯齿、平滑、颜色混合、渐变等。
为了将高度图应用到地形,映射到对应于不同地形类型的任意地表材质类型索引。哪种映射有意义取决于高度图的类型。如果它是真正的高度图(即它对应于表面高度),那么您可以使用它来将不同的高度范围映射到不同的地表材质类型,并且使用范围设置器(fromLevels().toLevel())来设置是有意义的上映射。
相反,如果“高度图”是直接指示必须使用哪些地形类型的位图或遮罩,则使用范围设置器没有意义,最好使用一对一设置器 (fromLevel().toLevel( ) 或 fromColour().toLevel()) 重复设置“高度图”值或颜色到地形类型的每个映射。
有关要使用的实际地表材质类型索引及其对应的地表材质类型的概述,请参阅此页面。请注意,如果您想要包含世界上尚不存在的自定义地形类型,则必须首先在世界上安装自定义地表材质类型(请参阅上面的“安装自定义地表材质”),并且该操作会将地形索引返回到用于特定的自定义地形。
直接应用图层
图层也可以直接应用于世界,无需高度图,但可以选择使用过滤器:
wp.applyLayer(layer)
//@return 返回一个新的MappingOp对象
//@param layer 要应用到世界的图层,见“加载图层”
.toWorld(world)
//@return this
//@param world 要应用图层的世界,见“加载世界”
.toLevel(0)
//可选的;将图层设置到的目标强度值;默认值是对应图层类型最大值的一半(对于1位图层(如Frost)为“on”);请参阅上面将高度图应用为图层下的讨论
//@param level 为图层设置到的目标强度值,默认值:图层类型最大值的一半
.withFilter(filter)
//可选的;指定应用图层的应用位置的条件限制;有关创建过滤器的详细信息,请参阅下文
//@return this
//@param filter 要使用的过滤器,见“创建过滤器”
.applyToSurface()
//可选的;默认置位的;指示应用于该世界的主世界地表维度;与applyToNether()和applyToEnd()互斥
//@return this
.applyToNether()
//可选的;指示应用于该世界的下界维度;与applyToSurface()和applyToEnd()互斥
//@return this
.applyToEnd()
//可选的;指示应用于该世界的末地维度;与applyToSurface()和applyToNether()互斥
//@return this
.setAlways()
//可选的;默认置位的;指示旧的图层始终被覆盖替换为新图层,世界上原有的图层将被删除;与setWhenLower()和setWhenHigher()互斥
//@return this
.setWhenLower()
//可选的;指示只有当新图层中的值低于世界上已有的值时,才将覆盖替换为新的图层强度;与setAlways()和setWhenHigher()互斥
//@return this
.setWhenHigher()
//可选的;指示只有新图层中的值高于世界上已有的值时,才将覆盖替换为新的图层强度;与setAlways()和setWhenLower()互斥
//@return this
.go();
//return Void
有关使用 toLevel() 指定的图层值,请参阅上面将高度图应用为图层下的讨论
直接应用地表材质
地形类型也可以直接应用于世界,无需高度图,但可以选择使用过滤器:
wp.applyTerrain(0)
//@return 返回一个新的MappingOp对象
//@param index 要应用到世界的地表材质索引
.toWorld(world)
//@return this
//@param world 要应用高度图的世界,见“加载世界”
.withFilter(filter)
//可选的;指定应用图层的应用位置的条件限制;有关创建过滤器的详细信息,请参阅下文
//@return this
//@param filter 要使用的过滤器,见“创建过滤器”
.applyToSurface()
//可选的;默认置位的;指示应用于该世界的主世界地表维度;与applyToNether()和applyToEnd()互斥
//@return this
.applyToNether()
//可选的;指示应用于该世界的下界维度;与applyToSurface()和applyToEnd()互斥
//@return this
.applyToEnd()
//可选的;指示应用于该世界的末地维度;与applyToSurface()和applyToNether()互斥
//@return this
.go();
//return Void
有关 applyTerrain() 中使用的实际地形类型索引及其对应的地形类型的概述,请参阅此页面。请注意,如果您想要包含世界上尚不存在的自定义地形类型,则必须首先在世界上安装自定义地表材质类型(请参阅上面的“安装自定义地表材质”),并且该操作会将地表材质索引返回到用于特定的自定义地表材质。
CreateFilterOp
对象上可用的操作
CreateFilterOp
对象用以完成创建过滤器的操作,该对象可以从wp.createFilter()
中获取,该类型提供如下方法:
public CreateFilterOp aboveLevel(int aboveLevel)
public CreateFilterOp belowLevel(int belowLevel)
public CreateFilterOp feather()
public CreateFilterOp onlyOnLayer(Layer layer)
public CreateFilterOp withValue(int value)
public CreateFilterOp orHigher()
public CreateFilterOp orLower()
public CreateFilterOp onlyOnBiome(int biomeIndex)
public CreateFilterOp onlyOnAutoBiome(int biomeIndex)
public CreateFilterOp onlyOnAutoBiomes()
public CreateFilterOp onlyOnWater()
public CreateFilterOp onlyOnLand()
public CreateFilterOp exceptOnTerrain(int terrainIndex)
public CreateFilterOp exceptOnLayer(Layer layer)
public CreateFilterOp exceptOnBiome(int biomeIndex)
public CreateFilterOp exceptOnAutoBiome(int biomeIndex)
public CreateFilterOp exceptOnAutoBiomes()
public CreateFilterOp exceptOnWater()
public CreateFilterOp exceptOnLand()
public CreateFilterOp aboveDegrees(int aboveDegrees)
public CreateFilterOp belowDegrees(int belowDegrees)
public CreateFilterOp inSelection()
public CreateFilterOp outsideSelection()
public Filter go()
创建过滤器
上面描述的高度图、图层和地形应用操作都可以带过滤器。创建方法如下:
var filter = wp.createFilter()
//@return 返回新的CreateFilterOp对象
.aboveLevel(0)
//可选的;仅在指定高度及以上应用操作
//@return this
//@param aboveLevel 指定的高度
.belowLevel(255)
//可选的;仅在指定高度及以下应用操作
//@return this
//@param aboveLevel 指定的高度
.feather()
//可选的;羽化边缘,当该过滤器应用于连续值图层时,让它在指定的地形范围周围淡出,而不是被急剧切断
//@return this
.aboveDegrees(0)
//可选的;仅在指定坡度及以上应用操作(以度为单位)
//请注意:仅适用于从高分辨率(16 位)高度图创建的世界或在WorldPainter中手动雕刻的世界;与lowerDegrees()互斥
//@return this
//@param aboveDegrees 指定的坡度
.belowDegrees(0)
//可选的;仅在指定坡度及以下应用操作(以度为单位)
//请注意:仅适用于从高分辨率(16 位)高度图创建的世界或在WorldPainter中手动雕刻的世界;与aboveDegrees()互斥
//@return this
//@param belowDegrees 指定的坡度
.onlyOnTerrain(0)
//可选的;仅在指定地表材质区域上应用操作;与其他所有 onlyOn* 条件互斥
//@return this
//@param terrainIndex 指定的地表材质索引号
.onlyOnLayer(layer)
//可选的;仅在指定图层区域上应用操作;与其他所有 onlyOn* 条件互斥
//@return this
//@param layer 指定的图层,见“加载图层”
.onlyOnBiome(0)
//可选的;仅在指定的手动绘制的生物群系的区域上应用操作;与其他所有 onlyOn* 条件互斥
//@return this
//@param biomeIndex 指定的生物群系ID
.onlyOnAutoBiome(0)
//可选的;仅在指定的自动绘制的生物群系区域上应用操作;与其他所有 onlyOn* 条件互斥
//@return this
//@param biomeIndex 指定的生物群系ID
.onlyOnAutoBiomes()
//可选的;仅在所有自动绘制的生物群系区域上应用操作;与其他所有 onlyOn* 条件互斥
//@return this
.onlyOnWater()
//可选的;仅在被淹没的区域上应用操作;与其他所有 onlyOn* 条件互斥
//@return this
.onlyOnLand()
//可选的;仅在未被淹没的区域上应用操作;与其他所有 onlyOn* 条件互斥
//@return this
.exceptOnTerrain(0)
//可选的;在排除了指定地表材质的区域上应用操作;与其他所有 exceptOn* 条件互斥
//@return this
//@param terrainIndex 指定的地表材质索引号
.exceptOnLayer(layer)
//可选的;在排除了指定图层的区域上应用操作;与其他所有 exceptOn* 条件互斥
//@return this
//@param layer 指定的图层,见“加载图层”
.exceptOnBiome(0)
//可选的;在排除了指定的手动绘制的生物群系的区域上应用操作;与其他所有 exceptOn* 条件互斥
//@return this
//@param biomeIndex 指定的生物群系ID
.exceptOnAutoBiome(0)
//可选的;在排除了指定的自动绘制的生物群系的区域上应用操作;与其他所有 exceptOn* 条件互斥
//@return this
//@param biomeIndex 指定的生物群系ID
.exceptOnAutoBiomes()
//可选的;在排除了所有自动绘制了生物群系的区域上应用操作;与其他所有 exceptOn* 条件互斥
//@return this
.exceptOnWater()
//可选的;在排除了被淹没区域的区域上应用操作;与其他所有 exceptOn* 条件互斥
//@return this
.exceptOnLand()
//可选的;在排除了未被淹没区域的区域上应用操作;与其他所有 exceptOn* 条件互斥
//@return this
.go();
//return 返回新的Filter对象
有关在 onlyOnTerrain() 或 exceptOnTerrain() 中使用的实际地形类型索引及其对应的地形类型的概述,请参阅此页面。有关在 onlyOnBiome()、onlyOnAutoBiome()、 exceptOnBiome() 或 exceptOnAutoBiome() 中使用的生物群落 ID 的概述,请参阅此页面。
评论(0)