想问一下,我的世界自动挖矿脚本能用JS写脚本吗

[WorldEdit]CraftScript脚本-编写出你想要的WE功能! [~3200字]&-&Minecraft(我的世界)中文论坛 -
后使用快捷导航没有帐号?
查看: 7825|回复: 33
[WorldEdit]CraftScript脚本 - 编写出你想要的WE功能! [~3200字]
您尚未登录,立即登录享受更好的浏览体验!
才可以下载或查看,没有帐号?
本帖最后由 LocusAzzurro 于
19:08 编辑
& & & & & & & & & & & & & & & &
编写出你想要的WE功能!
大家好,这里Az,最近和小组研究了一下WorldEdit中的CraftScript功能,再此分享一下研究的成果,也希望大家可以继续利用这个功能开发出更多的功能。
& & & & & & & & & & & & & & & &
本文由 Minecraft插件百科 小组合作完成
编写参与者:LocusAzzurro, henry5041, Lucky777777
本帖由三篇文章组成
- 探讨使用本功能前需要的准备工作以及基本的使用方法
- 探讨官方CraftScript脚本的使用方式
- 浅谈关于CraftScript的写法
阅读提示:你可能需要如下知识来理解本文并了解它的使用方式
WorldEdit 基础操作JavaScript 编写
WorldEdit插件资源(作者 sjjklh):
WorldEdit插件简短介绍: WorldEdit是一个常用的地图编辑工具,玩家可以利用它进行许多建筑中的操作,加快施工速度,同时也提供了许多便捷的功能。
绿宝石 +10
大大幸苦了!
楼主你太帅了~
Mcbbs有你更精彩~
一枚人气就够了,我穷~
别说,我还真看懂了点
楼主你太帅了~
很棒的作品!
Mcbbs有你更精彩~
帖子永久链接:&<button type="submit" class="pn" onclick="setCopy('http://www.mcbbs.net/thread--1.html', '帖子地址已经复制到剪贴板您可以用快捷键 Ctrl + V 粘贴到 QQ、MSN 里。')">点击复制Minecraft中文论坛 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖若有内容转载自其它媒体,不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予以删除并致以最深的歉意
7、管理员和版主有权不事先通知发贴者而删除本文
本帖最后由 LocusAzzurro 于
19:05 编辑
CraftScript 安装与使用例子
CraftScript为WorldEdit中的一个脚本系统(以下简称CS),提供了使用JavaScript调用WorldEdit功能来实现自己需要的功能的平台。我们可以安装其他人开发的CS脚本来为WorldEdit添加额外的功能(与我们为Minecraft添加Mod是差不多的意思),也可以按自己的需要编写一个脚本。本部分将会讲到WorldEdit中使用已编写好的CS的方法。
首先,为了能使用CS,我们需要安装Mozilla Rhino作为我们的脚本解析器,只有这样我们才能正常使用脚本。
Rhino下载页面:
在此页面中选择需要的版本点击Download link一栏下的链接进行下载,这里我们下载的是版本1.7R5 (一般情况下可以下载最新版本,不过1.7R5目前较为稳定),下载链接位置如下图标示位置。
& & & & & & & & & & & & & & & &
下载的文件为zip压缩包,在解压缩后其中有一系列文件,在这些中我们需要的是 js.jar ,如下图标示出的。
& & & & & & & & & & & & & & & &
在找到文件后,需要将其放置在服务端的 plugins 文件夹中 (与其他插件jar文件放在一起)。
& & & & & & & & & & & & & & & &
这样,我们的解析器就安装完成了,在服务器下一次启动时就会被加载。
现在,我们需要创建一个存放CS脚本的文件夹,我们需要在plugins文件夹中,WorldEdit文件夹下创建一个名为craftscripts 的文件夹,在这个文件夹中来存放要使用的脚本。
& & & & & & & & & & & & & & & &
接下来只要下载我们需要的脚本并放进之前创建的文件夹,重载WorldEdit就可以使用了,这里我将会使用WorldEdit官方的四个脚本中的maze.js迷宫生成脚本来展示一个使用例子。
WorldEdit CraftScript GitHub页:
如下图这里有官方的四个脚本,这里我们使用其中的maze.js
& & & & & & & & & & & & & & & &
可以看到我从GitHub中复制了maze.js的源码并将文件放置到了craftscripts文件夹中。
& & & & & & & & & & & & & & & &
这里提示一个可能出现的后台错误,由于js.jar不是一个插件,在服务器启动时可能会出现下面的插件无法加载的错误,这属于正常现象。
& & & & & & & & & & & & & & & &
在安装了maze.js之后,我查看了WorldEdit百科来了解这个脚本使用时需要的参数,可以看到需要的参数分别为block,width,length,即使用的方块,迷宫宽度,迷宫高度。在这里提示一下,安装脚本时建议仔细查看它的使用方式,发布脚本时也记得介绍脚本的使用方式与需要的参数。
& & & & & & & & & & & & & & & &
接下来我们登陆服务器来进行测试,运行脚本有三个指令,分别为:
/cs &脚本名& [参数] - 用给出的参数运行目标脚本
/&脚本名&.js [参数] - 上一个指令的快捷方式
/.s [参数] - 使用新给出的参数再次运行最后运行过的脚本
&脚本名& 为脚本文件的名称,即存储在craftscripts文件夹下的脚本的文件名
[参数] 为执行脚本时使用的参数,具体数量与每个参数的意义根据每个脚本而不同(见上一步)
这里我们使用的指令是/cs maze 1 10 10复制代码
即使用原石方块生成一个宽度10高度10的迷宫。
& & & & & & & & & & & & & & & &
输入指令后,便成功生成了迷宫。
& & & & & & & & & & & & & & & &
高度应该是长度吧&
本帖最后由 LocusAzzurro 于
19:06 编辑
WorldEdit 官方CraftScript脚本使用讲解
先前我们讲解了使用CS需要的的前置步骤,现在我们来看一下官方提供的4个脚本
脚本介绍与安装
WorldEdit官方脚本共有四个,本文主要介绍其中的maze.js与roof.js,另外两个脚本quickshot.js与draw.js均有不同程度的错误与兼容性问题故不进行介绍。
如下图,官方的脚本列表
& & & & & & & & & & & & & & & &
安装官方脚本时需要前往对应脚本的GitHub页面来获取相应的代码(后文每一部分均给出了对应的链接),一个比较简单的获取代码的方式是点击页面上的Raw按钮,即纯文本,即可查看代码的纯文本格式,在此格式下复制全部代码,并粘贴至一个文本文档中即可,粘贴完成保存后需要将文件重命名为 &脚本名&.js,最后将重命名后的脚本文件放置在脚本文件夹即可使用,脚本名可以随意命名,本篇教程中我们使用的命名均为官方的命名(即每一章中提到的),因为调用脚本时需要使用文件名,如果安装时使用了别的文件名,调用时使用对应的即可。
maze.js 迷宫生成
maze.js的功能是根据给出的参数随机生成一个迷宫,它的许多参数都可以被设定来生成需要的效果,首先让我们来看一下它的参数格式:
&方块& [长度] [宽度] [高度] [大小] [厚度] [标示]复制代码
当然,这只是脚本本身的参数,如果我们要使用它就要使用执行脚本的指令 /cs
我们的命令将会是
/cs maze &方块& [长度] [宽度] [高度] [大小] [厚度] [标示]复制代码
或/maze.js &方块& [长度] [宽度] [高度] [大小] [厚度] [标示]复制代码
或者,如果上一个运行的脚本也是这个的话,可以使用快捷指令格式,即/.s &方块& [长度] [宽度] [高度] [大小] [厚度] [标示]复制代码
现在让我们先来看一下主要的参数
&方块& 为生成的时候使用的方块,也就是墙壁的方块
[宽度] 是迷宫的宽度
[长度] 是迷宫的长度
长度和宽度指的是平面上迷宫的长宽,即两边上通道的数量,并不是实际的大小,生成出的迷宫的实际大小除了与这两个参数有关,也可[大小]和[厚度]有关。
[高度] 是迷宫墙壁的高度
[大小] 是迷宫内走廊的宽度
[厚度] 是迷宫墙壁的厚度
[标示] 为生成时可以使用的一系列标示,我们将会一一讲到,目前我们先通过例子看一下上面的几个主要参数的使用方式。
可以看到这些参数中只有&方块&是必须参数,所以首先我们仅使用这个参数,使用指令/cs maze 1复制代码
即生成一个墙壁为原石的迷宫,可以生成如下图的迷宫
& & & & & & & & & & & & & & & &
可以看到这样生成的迷宫使用了默认的长宽参数,即5,可以看到这个迷宫横向和竖向都各有5条走廊。
接下来我们来逐渐添加参数来观察效果
首先是长度和宽度,使用指令/cs maze 1 10 6复制代码
即生成原石墙壁,长度为10,宽度为6
生成结果如下,可以看到按需要生成了指定大小的迷宫
& & & & & & & & & & & & & & & &
接下来是高度,这一次使用的还是同样的方块,长宽均为10,高度设定为4,指令为/cs maze 1 10 10 4复制代码
可以看到生成了下面的迷宫,墙壁高度变为了4(默认为2)
& & & & & & & & & & & & & & & &
接下来我们来调整走廊宽度,使用指令/cs maze 1 10 10 3 2复制代码
将走廊宽度设定为2,如下图,这样就有了更宽的走廊,同时迷宫整体也会变得更大
& & & & & & & & & & & & & & & &
接着是墙壁厚度,这里我们使用厚度为2的墙壁,指令为/cs maze 1 5 5 3 2 2复制代码
可以看到下图的生成效果
& & & & & & & & & & & & & & & &
介绍完了这些参数,让我们来看一下标示,标示可以加在参数之后来控制生成的一些方式,首先我们来看一下可以使用的标示
i 添加出口和入口y 随机放置入口和出口位置f 添加地板c 添加顶e 放置空气方块a 只放置空气方块v 竖向生成迷宫
迷宫解答器相关
s 启动迷宫解答器g 在错误或未探寻分叉放置玻璃方块r 在错误路径放置红色羊毛b 在未探寻路径放置蓝色羊毛
标示加在所有其他参数之后即可使用,如果需要同时使用多个同时填写即可,不需要空格分隔,让我们用例子来看一下每个参数的作用
首先是 i 标示,即添加入口与出口,这里使用的指令是/cs maze 1 10 10 i复制代码
下图中可以看到迷宫被添加了出入口
& & & & & & & & & & & & & & & &
如果使用 y 标示的话就可以随机出入口位置,如下图效果,使用的指令是/cs maze 1 10 10 y复制代码
& & & & & & & & & & & & & & & &
接下来我们来看一下迷宫的顶与地面的设定
使用 f 标示可以同时生成地板
下图使用的指令是/cs maze 1 10 10 f复制代码
可以看到同时生成了地板
& & & & & & & & & & & & & & & &
接下来是顶,下图使用了/cs maze 1 10 10 c复制代码
使用的是 c 标示,即生成顶
& & & & & & & & & & & & & & & &
接下来是顶加底的组合使用,下图使用的是/cs maze ice 10 10 3 2 cf复制代码
使用了冰作为材料来看到生成的情况,可以看到同时使用了两个标示
& & & & & & & & & & & & & & & &
接下来是e和a标示,分别为带有空气方块的生成与只生成空气方块,首先是e标示,作用的生成空气方块,因为如果不使用此标示进行生成会只生成墙壁方块,剩余部分(即走廊)的原有方块并不会受到影响
下图是不使用e标示的生成效果
& & & & & & & & & & & & & & & &
可以看到原先位置得石英块并没有被移除,接下来同样的生成,这次使用e标示/cs maze 1 5 5 e复制代码
可以看到在走廊中的石英块也被替换成了空气方块
& & & & & & & & & & & & & & & &
接下来是a标示,它的作用是仅生成空气方块,即为只有走廊的位置会被替换成空气方块,
如下图我们创建了一个需要作为场景的地面
& & & & & & & & & & & & & & & &
使用指令/cs maze 1 10 10 a复制代码
其实这里的墙壁方块并不重要,因为并不会生成,但也要加上,否则会参数检测错误
输入指令后生成效果如下图,这种生成模式可以用在已经事先做好生成材料的情况下或者用于地下生成
& & & & & & & & & & & & & & & &
然后生成控制类最后一个标示v,它的作用是使迷宫竖直生成,如下图所示,使用的指令是/cs maze 1 10 10 v复制代码
& & & & & & & & & & & & & & & &
接下来是解答器相关的几个标示
首先是s,即开启解答器,使用后会在生成迷宫后用绿色羊毛标注出正确路线
如下图,使用了/cs maze 1 10 10 s复制代码
& & & & & & & & & & & & & & & &
接下来是g标示,它会在解答的基础上用玻璃封死错误的路线/cs maze 1 10 10 g复制代码
& & & & & & & & & & & & & & & &
然后是r标示,它会用红色羊毛标注出在解答器运行过程中确定的错误线路,下图指令为/cs maze 1 10 10 r复制代码
& & & & & & & & & & & & & & & &
最后是b标示,它会用蓝色羊毛标注出在解答器运行过程中没有探寻的路径,下图指令为/cs maze 1 10 10 b复制代码
& & & & & & & & & & & & & & & &
如果同时使用解答器的四个标示,即/cs maze 1 10 10 sgrb复制代码
效果会是这样
& & & & & & & & & & & & & & & &
介绍完了各个参数,我们来看一个实际的使用
我们使用的是/cs maze 15 15 10 3 2 fe复制代码
生成了一个较大的迷宫
& & & & & & & & & & & & & & & &
接着我们用百分比替换对墙壁做一些处理,一个简单的遗迹迷宫就完成了~
可以作为活动场地,竞技场等等
& & & & & & & & & & & & & & & &
roof.js 屋顶生成
屋顶生成脚本的功能是在指定的选区上方生成1:1的金字塔形屋顶,参数格式很简单,为&方块&复制代码
即为仅需要指定生成使用的方块即可
加入指令中即为/cs roof &方块&复制代码
让我们来看一个简单的例子,如下图我们选择了一个选区,并使用指令/cs roof 1复制代码
& & & & & & & & & & & & & & & &
如下图,可以以选区为底生成一个金字塔形屋顶
& & & & & & & & & & & & & & & &
要上天的API啊
本帖最后由 LocusAzzurro 于
19:06 编辑
Craftscript 编写浅谈
通过编写CraftScript脚本,我们可以按自己的需求调用WorldEdit的各种功能来达到需要的目的,以及实现一些基于WorldEdit的拓展功能,就像我们在上一章讲到的两个脚本一样。
通过编写CraftScript并在WorldEdit中使用它们有很多优势,如使用WorldEdit撤销与重做系统,方块放置优先级系统,高级方块语法系统以及通过玩家的选区执行操作等。
CraftScript是通过JavaScript编写的,这也使创建一个脚本变得十分简单。
首先,CraftScript中有以下三个全局命名空间中的变量:
context&&CraftScriptContext类的一个实例
player&&玩家的副本,LocalPlayer类的实例
argv&&以string储存的参数的Java数组
WorldEdit中的所有编辑都通过一个EditSession (编辑会话)来完成,这个对象会自动处理方块放置顺序与编辑历史,通过下面的语句可以在脚本中添加一个编辑会话:
var sess = context.remember();复制代码
每次这个方法被调用时,你就会得到一个新的EditSession。
当设定方块时,我们不可以直接设定方块的种类,因为如此做会造成一些数据的丢失,如数据值,内容物等,所以我们要使用一个BaseBlock (基本方块),一个BaseBlock是一个方块独立的展示并且不包括坐标,这说明我们可以声明一个新的BaseBlock并在多处重复使用它,一个BaseBlock包含了方块的种类和数据值,如果需要如箱子和牌子等复杂的方块,则需要使用一个BaseBlock的变种,如SignBlock。
例程:放置一个颜色数据值为4的羊毛
importPackage(Packages.com.sk89q.worldedit.blocks);var sess = context.remember();sess.setBlock(player.getBlockOn(), new BaseBlock(BlockID.CLOTH, 4));复制代码
setBlock为放置方块的方法,第一个参数为坐标,第二个参数即为使用的方块,在使用的方块处声明了需要使用的方块。
完整的方块名列表:
通过在EditSession中调用getBlock(),也可以获取一个以BaseBlock表示的方块。
使用Java包
在编写脚本时我们需要导入对应的Java包才能使用其中的方法,如同我们在之前看到的,包的导入方法为:
importPackage(Packages.包.名.称);复制代码
之前我们使用的是:
importPackage(Packages.com.sk89q.worldedit.blocks);复制代码
这样就导入了WorldEdit方块类的包,当我们需要使用一个方法的时候,就要导入对应的包,每个类的具体内容可以通过查阅WorldEdit的APIDocs来了解。
参数是通过argv参数来传递的,如果需要检查用户是否输入了正确数量的参数,可以使用CraftScriptContext.checkArgs() 来完成。
例子:检查参数context.checkArgs(1, 3, &&block& [width] [height]&);复制代码
第一个参数为需要的最小的参数数量,第二个为最大参数数量,第三个为错误时输出的使用方式提示。
如果需要将得到的参数转换为一个BaseBlock,则需要使用CraftScriptContext.getBlock(),这个方法会检查方块黑名单,但如果需要忽略黑名单,则可以通过在方法第三个参数的位置使用true的布尔值。
例子:获取输入的方块
context.checkArgs(1, 3, &&block& [width] [height]&);var block = context.getBlock(argv[1]);复制代码
如果用户输入了一个无效的方块,就会出现一个异常,脚本运行将会终止且用户将会收到一个错误信息。
例程:将附近的发射器用箭填充
importPackage(Packages.com.sk89q.worldedit.blocks); //导入Java包var session = context.remember(); //编辑会话声明var origin = player.getPosition(); //获取玩家位置var arrows = new BaseItemStack(262, 64); //声明物品堆变量,此处为一组箭var items = [arrows, arrows, arrows,& && && && & arrows, arrows, arrows,& && && && & arrows, arrows, arrows] //声明发射器内容变量for (var x = -4; x &= 4; x++) {& & for (var y = -4; y &= 4; y++) {& && &&&for (var z = -4; z &= 4; z++) { & && && && &var pt = origin.add(x, y, z); //通过递归检查附近方块& && && && &var id = session.getBlockType(pt); //每次获取方块种类& && && && && && && && &if (id == BlockID.DISPENSER) { //如果方块种类为发射器即进行填充& && && && && & var block = session.getBlock(pt); //声明方块种类,即发射器& && && && && & block.setItems(items); //设置方块内容,即9组箭& && && && && & session.setBlock(pt, block); //放置带有箭的发射器方块& && && && && & & && && && && & player.print(&Arrows set @ & + pt); //向玩家输出放置坐标& && && && &}& && &&&}& & }}复制代码
例程:空心球体
By Lucky77777
//通过生成两个半径不同球体来完成生成空心球体的效果importPackage(Packages.com.sk89q.worldedit);importPackage(Packages.com.sk89q.worldedit.blocks);importPackage(Packages.com.sk89q.worldedit.patterns);importPackage(Packages.com.sk89q.worldedit.function.pattern); //导入包context.checkArgs(1, 3, &&block& [inside_radius] [outside_radius]&); //检查参数数量var session = context.remember(); //编辑会话声明var position = player.getPosition(); //获取玩家位置var patterno = new SingleBlockPattern(new BaseBlock(context.getBlock(argv[1]))); //声明大球体材料,获取第一个参数作为材料var patterni = new SingleBlockPattern(new BaseBlock(BlockID.AIR)); //声明小球体材料,空气方块作为材料var inside = argv.length & 2 ? argv[2] : 3; //获取外半径,获取失败使用默认值var outside = argv.length & 3 ? argv[3] : 5; //获取内半径,获取失败使用默认值session.makeSphere(position,patterno,outside,true); //创建外球体session.makeSphere(position,patterni,inside,true); //创建内球体复制代码
例程:直线彩虹生成
By LocusAzzurro
//指令使用 /cs rainbow &宽度& &方向&//&宽度& = 每种颜色方块数//&方向& = 1|2|3|4 之一importPackage(Packages.com.sk89q.worldedit); //加入库importPackage(Packages.com.sk89q.worldedit.blocks);var sess = context.remember(); //设定session记录(这样可以被//undo)var origin = player.getPosition(); //设定原点为玩家位置context.checkArgs(2, 2, &Usage: &Length& &Direction& &); //检查参数var red = new BaseBlock(BlockID.CLOTH, 14); //七个颜色的羊毛声明var orange = new BaseBlock(BlockID.CLOTH, 1);var yellow = new BaseBlock(BlockID.CLOTH, 4);var green = new BaseBlock(BlockID.CLOTH, 5);var cyan = new BaseBlock(BlockID.CLOTH, 9);var blue = new BaseBlock(BlockID.CLOTH, 11);var purple = new BaseBlock(BlockID.CLOTH, 10);var length = argv[1]; //第一个参数为每种颜色宽度var dir = argv[2]; //第二个参数为方向 1/2/3/4 对应四个方向for (i=0;i&i++) //红色羊毛放置{& && &&&if (dir==1) var spt=origin.add(i,0,0); //检查方向确定放置位置& && &&&if (dir==2) var spt=origin.add(0,0,i);& && &&&if (dir==3) var spt=origin.add(-i,0,0);& && &&&if (dir==4) var spt=origin.add(0,0,-i);& && &&&sess.setBlock(spt, red); //放置方块}for (i=i&2*i++) //橙色{& && &&&if (dir==1) var spt=origin.add(i,0,0);& && &&&if (dir==2) var spt=origin.add(0,0,i);& && &&&if (dir==3) var spt=origin.add(-i,0,0);& && &&&if (dir==4) var spt=origin.add(0,0,-i);& && &&&sess.setBlock(spt, orange);}for (i=2*i&3*i++) //黄色{& && &&&if (dir==1) var spt=origin.add(i,0,0);& && &&&if (dir==2) var spt=origin.add(0,0,i);& && &&&if (dir==3) var spt=origin.add(-i,0,0);& && &&&if (dir==4) var spt=origin.add(0,0,-i);& && &&&sess.setBlock(spt, yellow);}for (i=3*i&4*i++) //绿色{& && &&&if (dir==1) var spt=origin.add(i,0,0);& && &&&if (dir==2) var spt=origin.add(0,0,i);& && &&&if (dir==3) var spt=origin.add(-i,0,0);& && &&&if (dir==4) var spt=origin.add(0,0,-i);& && &&&sess.setBlock(spt, green);}for (i=4*i&5*i++) //青色{& && &&&if (dir==1) var spt=origin.add(i,0,0);& && &&&if (dir==2) var spt=origin.add(0,0,i);& && &&&if (dir==3) var spt=origin.add(-i,0,0);& && &&&if (dir==4) var spt=origin.add(0,0,-i);& && &&&sess.setBlock(spt, cyan);}for (i=5*i&6*i++) //蓝色{& && &&&if (dir==1) var spt=origin.add(i,0,0);& && &&&if (dir==2) var spt=origin.add(0,0,i);& && &&&if (dir==3) var spt=origin.add(-i,0,0);& && &&&if (dir==4) var spt=origin.add(0,0,-i);& && &&&sess.setBlock(spt, blue);}for (i=6*i&7*i++) //紫色{& && &&&if (dir==1) var spt=origin.add(i,0,0);& && &&&if (dir==2) var spt=origin.add(0,0,i);& && &&&if (dir==3) var spt=origin.add(-i,0,0);& && &&&if (dir==4) var spt=origin.add(0,0,-i);& && &&&sess.setBlock(spt, purple);}复制代码
通过查阅WorldEdit的API可以了解所有类的方法以及使用方式。
EditSession类:
LocalPlayer类:
CraftScriptContext类:
BaseBlock类:
刚刚看到那层楼的【code】【/code】部分挂了_(:зゝ∠)_结果刚评完分就好了_(:зゝ∠)_
加油~我学习到了好多WE的高级用法= ̄ω ̄=&
code区域挂了= ̄ω ̄=
本帖最后由 LocusAzzurro 于
21:13 编辑
CraftScript为玩家们提供了一个创造自己需要的功能的机会,这里仅对编写方面进行了简单的探讨,更深层的使用方式还有待各位发掘。也希望脚本安装与使用的部分有令各位更多的了解这个功能。
我见过你耶 原来你不是版主呢我等只能看看 话说还能自己编写 好孽海&
本帖最后由 迷踪 于
01:22 编辑
原来WE还能自己编写..涨姿势了,等写完一定好好看
Craftscript 编写浅谈
通过编写CraftScript脚本,我们可以按自己的需求调用WorldEdit的各种功能来达到需要 ...
刚刚看到那层楼的【code】【/code】部分挂了_(:зゝ∠)_结果刚评完分就好了_(:зゝ∠)_
加油~我学习到了好多WE的高级用法= ̄ω ̄=
【又是你】
关于迷宫的教程我给满分
关于自己编写的那个教程 ._. 233
( ????? )简单的运用,具体想实现什么还是自己参考着写吧~&
我见过你耶 原来你不是版主呢我等只能看看&&话说还能自己编写 好孽海
最近都没啥人上论坛,这时候发不好吧= =
hhttll 发表于
【又是你】
关于迷宫的教程我给满分
简单的运用,具体想实现什么还是自己参考着写吧:)
伟大的LZ,你的那个彩虹代码真的复杂化了,作为一个专门写js的,帮你简化了一下。
警告:以下代码未经过正式测试,但是已通过 Node.js 模拟。//指令使用 /cs rainbow &宽度& &方向&//&宽度& = 每种颜色方块数//&方向& = 1|2|3|4 之一importPackage(Packages.com.sk89q.worldedit); //加入库importPackage(Packages.com.sk89q.worldedit.blocks);var sess = context.remember(); //设定session记录(这样可以被//undo)var origin = player.getPosition(); //设定原点为玩家位置context.checkArgs(2, 2, &Usage: &Length& &Direction& &); //检查参数var length = argv[1]; //第一个参数为每种颜色宽度var dir = argv[2]; //第二个参数为方向 1/2/3/4 对应四个方向//以上保持不变var posBias = 0; //偏移格子数var nextPos = (dir === 1) ? (function(){ return origin.add(posBias++,0,0); })& && && && & :(dir === 2) ? (function(){ return origin.add(0,0,posBias++); })& && && && & :(dir === 3) ? (function(){ return origin.add(-posBias++,0,0); })& && && && & :(function(){ return origin.add(0,0,-posBias++); });[& &new BaseBlock(BlockID.CLOTH, 14),& & new BaseBlock(BlockID.CLOTH, 1),& & new BaseBlock(BlockID.CLOTH, 4),& & new BaseBlock(BlockID.CLOTH, 5),& & new BaseBlock(BlockID.CLOTH, 9),& & new BaseBlock(BlockID.CLOTH, 11),& & new BaseBlock(BlockID.CLOTH, 10)].forEach(function (block) {& && & for (i = 0; i & i++) {& && &&&sess.setBlock(nextPos(), block);& & }});复制代码
神tm nodejs测试这个(╯‵□′)╯︵┻━┻&
@LocusAzzurro
经测试无法运行_(:зゝ∠)_
讲道理,这个方法能不能再完善搞出一个随机dungeon的东西,然后在服务器里由指令方块插件触发,每次生成不同的dungeon供玩家挑战。
讲道理随机箱子内容和随机走廊理论上是可以做到的,然而最大的问题是WE指令不能通过CB触发&
讲道理,这个方法能不能再完善搞出一个随机dungeon的东西,然后在服务器里由指令方块插件触发,每次生成不 ...
讲道理随机箱子内容和随机走廊理论上是可以做到的,然而最大的问题是WE指令不能通过CB触发
讲道理 scriptblock 的 @bypass /tp @bypadd //we command&
本帖最后由 hhttll 于
06:40 编辑
伟大的LZ,你的那个彩虹代码真的复杂化了,作为一个专门写js的,帮你简化了一下。
警告:以下代码未经过正 ...
@LocusAzzurro
""以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。
版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。}

我要回帖

更多关于 我的世界按键精灵脚本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信