本帖最后由 zjxx 于 2019-5-25 20:44 编辑




Mod介绍
Psi是由Vazkii所制作的Mod
(其著名作品有植物魔法,神秘工匠等)
Psi引入了执行一系列动作的系统(类似于...脚本?)
玩家可以利用这套系统自行编出各式各样的术式

Psi的创作灵感来自于魔法高 校的劣等生
(不过现在大陆不能在哔哩哔哩上看了)
就因为这Mod我去把番补完了orz

Psi的编码基于向量
游玩该Mod前请将此内容学习/复习一遍
以便更方便的编码。

来自群组: Nuclear Fusion


初识向量
https://baike.baidu.com/item/%E5%90%91%E9%87%8F/1396519?fr=aladdin
其实Psi编码需要用到的知识也不多(逃

首先明确“向量”的概念
说白了,向量就是一个带箭头的线段,代表着方向和大小
如图所示,在Minecraft中按下F3+B就能看到运动生物的向量
物品也有向量
接下来就是明确向量运算的概念了
请自行参阅百科的运算部分

阅读须知
  • 本教程并非完全按照Psi内部自带顺序讲解,而是选取了作者认为比较有用的各章节,章节名后面附有本章将要学习到的内容梗概。
  • 若想要观看按照原有顺序并且非常具体的教程,请前往3楼
  • 善用Ctrl+F
编写准备*
首先你需要制作这几样东西:
铁质CAD机体,CAD装配机
打开CAD装配机方块,将铁质CAD丢进去
然后你就得到了一个只能用于转化物品而不能执行代码的CAD
接着往地上丢一些红石
用CAD向其右键
接着你就可以用Psi粉末制作一个可以施法的CAD了!
第一个术式
制作下列物品:
术式编写台,基础CAD电池,基础CAD核心,基础CAD弹夹,任意颜色的着色器
使用后面的物品和铁质CAD外壳在CAD装配机中合成一个新的CAD
这就是一个能够施法的CAD了
注意:之前你做的CAD可以直接合成成为铁质CAD外壳
CAD属性将会在讲更为高级的代码时提到
每个人只能携带一把CAD!!

按C(默认)打开Psi的学习界面
(拿着CAD按则会打开其弹夹)
学习教程1
再打开术式编写台
你将在这一个9*9的格子里编写代码!
左键选择格子,右键格子选择所指格的代码块
我们先来写一个最简单的代码
右键选择“选择符:施法者”,在其旁边选择“启动式:调试”
左侧的框便是这个术式的属性
将左侧的“目标”选为施法者格子的那个方向
启动式即是动作,选择符则是执行动作的目标
此处的代码含义是:施法者进行一次调试(即打印)
给其命名
接着制作一个术式子弹
用它对着术式编写台右键,即可将代码刻录至子弹上
接着打开CAD装配机,将子弹丢到其中
拿着装有子弹的CAD,右键
装有术式子弹的CAD无法制作Psi粉末
解决方法是拿着CAD按C打开弹夹切换到空槽即可

后期Lv10和Lv15的术式也很这个类似,不同的是需要加一个术式子弹
子弹装载的术式是该章节的一个启动式。(甚至不需要选择符)
后期便不一一赘述了。

爆炸篇*
爆炸即是艺术~
这章很重要!在很多地方都可以用!
往术式编写台里写这些东西
由于直接获取实体视线得到的向量过短
强行配合爆炸命令只会炸到自己
这时就要用到向量追踪
在玩家位置设置一条方向为视线方向的射线
与视线向量的焦点即为选定的方块
大概...类似于这样
【灵魂画师otz】
大小参数是指方块距离,在此参数外的方块不会被选定
不管,反正我们已经获取到方块了
在那个方块位置执行爆炸指令
最后代码效果是这样的
使用效果:
防爆指令对这个无效哦
实体初识*
本章增加了操作实体的命令块
要操作实体,先要表明你要操作什么类型的实体
这⑤个便是你可以操作的实体类型
分别为物品,生物,敌人,动物,投射物
这就是一个选择了施法者附近5格距离内所有动物的命令块
但是你无法对距离内所有生物进行操作
之前那⑤选取的都是实体列表
这时就要用到另外几个运算符
运算符:离点最近,运算符:随机实体,运算符:聚焦实体
从指定实体列表中运算出指定实体
将之前的代码补充完整,这就是一个选择施法者5格范围内距离施法者最近的动物的命令
然后你就可以对那个动物进行操作啦,方法可以借鉴之前的‘’爆炸”或者“附加运动”
(目标要选为那个运算符!)
这就是一个使施法者5格范围内距离施法者最近的动物向上运动的命令。

再说说那个列表的命令块
运算符:加入列表,运算符:移出列表
作用是将指定实体加入指定列表
指定列表已经学过了,就是上面那⑤
指定实体.....以现在学到的内容,你指定的实体只能是你自己!
(后期会学到更多的可指定的实体)
如图,便是将你自己加入到施法者位置5格内的生物列表中,再对离点最近的生物(也就是你自己)进行一次附加运动
也许可以用“运算符:随机实体”来玩点东西...?

另类施法*
不知你有没有注意到除了“术式子弹”还有其他类型的子弹?
此章内容就是关于那些子弹和其他东西的。
投射型术式子弹 循环型术式子弹  圈阵型术式子弹  榴弹型术式子弹 遥控型术式子弹 地雷型术式子弹
作用分别为:
丢出一个子弹(不受重力),碰到障碍触发
丢出一个子弹,碰到障碍循环触发直到施法者魔力耗尽
在施法者目视处形成一个法阵,循环触发20次
丢出一个子弹(受重力),3秒后爆炸同时触发术式
丢出一个子弹,通过右键“术式引发器”触发
丢出一个子弹,被生物踩到触发
丢出去的那个子弹可以用“选择符:焦点”来选择
这便是一个扔出子弹后爆炸的术式

接下来介绍向量尺
作用是通过shift右键+右键人为构造一个向量
比如我拿着向量尺shift右键右边的草方块再右键左边草方块
就得到了这样的一个向量(虽然是画出来的#run)
方块操作*
马上你就可以告别工具啦【大雾】
这一章需要用到之前学到的那个选取方块的术式
先来讲破坏方块,破坏的目标用这个术式也就能搞定了
这是一个破坏指针选定方块和它下面一个方块的术式
启动式:破坏方块序列的参数目标应是一个向量
最大指能破坏的数量
启动式:破坏方块同理,只是少掉了最大和目标
启动式:破坏方块的默认开采等级为铁镐
可以在Config里更改
改成3就是钻石级的了

接着讲放置方块,这时用上面那个术式便不够了
鼠标指针选择的方块一定是一个存在的方块,我们无法在已存在的方块上进行放置
这是就要用到另一个命令块了
运算符:向量轴向追踪
作用是获取所指方块侧面的一个向量
这样子我们再用一个向量和,就能得到所指方块侧面那个不存在的方块了
代码写出来就是这样子的
这个可以记一下,很多都能用到的
  1. <font face="微软雅黑">{spellName:"test",uuidMost:-1853279589200801906L,validSpell:1b,spellList:[0:{data:{key:"selectorCaster"},x:4,y:0},1:{data:{params:{_target:1},key:"operatorEntityLook"},x:4,y:1},2:{data:{params:{_target:2},key:"operatorEntityLook"},x:4,y:3},3:{data:{key:"selectorCaster"},x:4,y:4},4:{data:{params:{_target:3},key:"operatorEntityPosition"},x:5,y:0},5:{data:{params:{_ray:3,_max:0,_position:1},key:"operatorVectorRaycast"},x:5,y:1},6:{data:{params:{_vector3:0,_vector2:2,_vector1:1},key:"operatorVectorSum"},x:5,y:2},7:{data:{params:{_ray:3,_max:0,_position:2},key:"operatorVectorRaycastAxis"},x:5,y:3},8:{data:{params:{_target:3},key:"operatorEntityPosition"},x:5,y:4}],uuidLeast:-8547478259890621487L}</font>
复制代码
使用方法是复制到剪切板然后shift右键术式编写台右下角那玩意
于是我们就可以放置方块了!
代码效果:
放置的方块为快捷栏CAD右边的方块~

流控制
现在你可以对Psi术式的执行方式进行更深层次的理解了!
接下来进入本章内容

启动式:休眠的作用是延迟术式发动
但是根据启动式的执行顺序,你需要将启动式:休眠置于你要执行的术式的左上方才能起作用

常量:封装的作用是将一个数字包装成数字参数
可以举个例子,启动式:爆炸的级别需要一个数字参数
单纯输入一个“1”,可以是数字也可以是数字参数
但如果用“1+1”的方法得到的结果是个数字,就不能作为启动式:爆炸的级别参数
这时候便可以用常量:封装
常量即为最终的量,需要你自己计算
【Psi中好像还没有未知数计算2333】
加上延时,整个术式的效果就是这样的。

启动式:终结需要搭配选择符:潜行状态和循环子弹使用
此术式的作用是扔出一个子弹,循环进行爆炸,可以通过shift来控制是否爆炸
选择符:潜行状态的作用是输出一个数字,潜行时为0,不潜行时为1
启动式:终结检测到1~-1中的值便会终止术式
利用这个便可以控制循环子弹的执行了

内存管理
提供了存储向量的方法
首先你要得到一个向量
比如这就是一个能够得到你看到的方块的向量
接着将它存储
能够存储的向量数量取决于你CAD弹夹的整行数
比如我这个CAD有3整行,便能存储1,2,3的向量
接下来我们要提取向量
数字即为你存储向量的数字
实例演示可以看下我在BBS活动中投稿的视频中的开头
http://www.mcbbs.net/thread-788261-1-1.html
那就是存储向量再提取向量远程使用的应用


运动篇
术式编写台
放置“选择符:施法者”
于其旁放置“运算符:实体视线”和“启动式:附加运动”
目标选为施法者
其中附加运动还有另外两参数:速度,方向
方向选为实体视线,用连接符连接
速度则选择一个数字就行
(注意不能够过大,CAD配置不够)
完成效果:
这串代码的意思:施法者往视线方向以“5”的速度运动一次
使用效果:
注意:魔力用完会扣血
方块移动
用选定指定方块的术式即可
通关实例代码:

移动进阶
闪现....是个好东西
虽然贼好写
群体闪现和列表闪现的用法也差不了太多,就不一一列出了~

元素艺术
此章的内容倒是偏魔法了
5个命令块
其中第二个是取一个随机数字
其他4个便是对元素操控的启动式了
其中除了雷击之外,其他3个都需要用选择方块侧面方块的术式来启动
通关实例代码:

工具施法*
此章内容主要针对Psi工具
Psi工具有3个弹槽,可以安装3个子弹
Psi工具可以使用选择符:破坏方块(侧),Psi剑便使用选择符:攻击目标
通关实例代码:
方块被Psi工具破坏后进行一次爆炸
其中选择符:破坏方块获得的已经是方块了,故无需获取实体位置
正面效果
此章内容....总算有点实用性啦2333
增加的效果的使用方法无不外乎为此

负面效果
使用方法与正面效果类似
推荐使用“工具施法”中的“选择符:攻击目标”来施行
不然给自己搞凋灵啊(逃
通关代码实例:

套装施法*
最实用的一章来了啊~

先将增加的命令块
其实第一第三个都没啥用#run
选择符:时间的作用是输出CAD存在于世界的tick值(数字)
选择符:承受伤害的作用是输出承受伤害的值(数字)
选择符:攻击者的作用是选择攻击施法者的人
但是玩家不可能时时刻刻拿着CAD右键来报复攻击者
这时就要用到套装施法了
使用Psi金属可以制作Psi金属套装
每件装备都有3个子弹槽
其中头盔需要玩家手动指定触发条件
胸甲在穿戴者受伤时触发术式
护腿循环施法
鞋子在穿戴者跳跃时触发
选择符:攻击者便可以用在胸甲上
比如别人打你一下就让它原地爆炸/螺旋升天hhh
代码会在下文的实例中放出
再来讲讲头盔
头盔可以配置光传感器,水传感器,热传感器,压力传感器
作用分别为
  • 处于低亮度状态下触发
  • 携带者碰到水触发
  • 携带者着火触发
  • 携带者血量较低时触发

此章还能用到一个装备控制器
拿在手上按C便能打开GUI
用法和CAD的GUI类似,左键上方的装备可以切换控制
shift+右键装备控制器会取消所有装备绑定的子弹
按C重新选择子弹即可

说了这么多终于可以放通关代码了(逃



熔炉工厂
用法和上文的实体操作类似
选择离点最近/其他运算符来选择一个可冶炼物
再用启动式:熔炼物品来熔炼
启动式:熔炼方块用来熔炼已经被放置的方块
但是那个方块如果熔炼后是物品则无法成功
通关实例代码:

方块构筑
启动式:方块构筑的作用与启动式:放置方块的作用类似
只不过不需要你自己准备方块了
构筑出来的方块可以设置存在时间(时间的值为tick,1tick=1/20 seconds)
不设置的话为永久存在
构筑方块的颜色取决于CAD的着色器颜色
默认为淡蓝色

启动式:构筑光源的作用是构建一个没有碰撞箱的光源

启动式:构筑方块序列作用于启动式:放置方块序列作用类似
时空操纵
启动式:时空逆流的作用就是时空逆流(猎空2333)
启动式:时空之锤的作用是指定时间后将你传送至施法位置



一键砍树
能够一键砍树的术式


在被破坏方块的位置向上方七格破坏方块,做到一键砍树
  1. <font face="微软雅黑">
  2. {spellName:"一键砍树",uuidMost:-8580282913646296604L,validSpell:1b,spellList:[0:{data:{key:"selectorCaster"},x:2,y:3},1:{data:{params:{_target:1},key:"operatorEntityLook"},x:2,y:4},2:{data:{params:{_target:3},key:"operatorEntityPosition"},x:3,y:3},3:{data:{params:{_ray:3,_max:0,_position:1},key:"operatorVectorRaycast"},x:3,y:4},4:{data:{key:"constantNumber",constantValue:"7"},x:4,y:2},5:{data:{params:{_x:0,_y:1,_z:0},key:"operatorVectorConstruct"},x:4,y:3},6:{data:{params:{_max:2,_target:1,_position:3},key:"trickBreakInSequence"},x:4,y:4},7:{data:{key:"constantNumber",constantValue:"7"},x:4,y:5}],uuidLeast:-8283642852558204894L}
  3. </font>
复制代码


飞行
用于护腿,用处:使用鞘翅时可以自由变化角度(向上)
原理是不停向视线处移动达到向上飞行的作用

  1. <font face="微软雅黑">
  2. {spellName:"飞行",uuidMost:7728573619504498458L,validSpell:1b,spellList:[0:{data:{params:{_target:4},key:"connector"},x:3,y:2},1:{data:{params:{_target:1},key:"operatorEntityLook"},x:3,y:3},2:{data:{key:"selectorCaster"},x:4,y:2},3:{data:{params:{_direction:3,_speed:2,_target:1},key:"trickAddMotion"},x:4,y:3},4:{data:{key:"constantNumber",constantValue:"0.1"},x:4,y:4}],uuidLeast:-7887062816346832089L}
  3. </font>
复制代码


自动冶炼
此术式用于Psi镐子,用处是挖矿时能够将破坏的矿石自动冶炼成锭
原理:
破坏完矿石,掉落后延迟0.5s发动术式(不设延迟的结果就是失败)
选择被破坏方块位置5格位置的可熔炼物(即掉落的矿石)进行冶炼,产出一个锭

  1. <font face="微软雅黑">
  2. {spellName:"自动冶炼",uuidMost:-3017857532941022387L,validSpell:1b,spellList:[0:{data:{params:{_time:4},key:"trickDelay"},x:0,y:0},1:{data:{key:"constantNumber",constantValue:"10"},x:1,y:0},2:{data:{params:{_target:4},key:"connector"},x:2,y:3},3:{data:{params:{_target:1},key:"connector"},x:2,y:4},4:{data:{params:{_target:1},key:"connector"},x:2,y:5},5:{data:{key:"selectorBlockBroken"},x:3,y:3},6:{data:{params:{_position:1,_radius:4},key:"selectorNearbySmeltables"},x:3,y:4},7:{data:{params:{_target:1,_position:3},key:"operatorClosestToPoint"},x:3,y:5},8:{data:{params:{_target:1},key:"trickSmeltItem"},x:3,y:6},9:{data:{key:"constantNumber",constantValue:"5"},x:4,y:4}],uuidLeast:-6726515384283545761L}
  3. </font>
复制代码
搞死敌人的方法
初级:赋予药水效果
缺点:亡灵生物无效
  1. <font face="微软雅黑">{spellName:"凋灵敌人",uuidMost:7925778030370833934L,validSpell:1b,spellList:[0:{data:{key:"constantNumber",constantValue:"5"},x:5,y:5},1:{data:{key:"constantNumber",constantValue:"1"},x:6,y:4},2:{data:{params:{_power:1,_time:3,_target:4},key:"trickWither"},x:6,y:5},3:{data:{key:"selectorAttacker"},x:7,y:5}],uuidLeast:-6647586300032340841L}</font>
复制代码
中级:升天,爆炸
缺点:耗魔较多


挖掘通道
用于Psi镐子和Psi铲子
用处是向挖掘的方向自动破坏出一个2格高5格长1格宽的通道
代码解析:
整个术式的核心是两个启动式:破坏方块序列
一个用于破坏当前高度的方块,另一个用于破坏当前高度+1高度距离的方块
这是破坏当前高度的术式
首先获取方块侧面的向量
再获取它的反向量,这样我们就能得到面朝向方向的向量了
由于这玩意贼短,不能满足我们的破坏方块序列【雾】
用一个向量乘延长它
(此处乘6,再多点也无所谓)
被破坏的方块作为位置,向量乘的结果作为方向,再加一个最大破坏个数
破坏当前高度的一列方块的术式就写好了
接着写破坏当前高度+1高度方块的术式
目标不变,位置要发生下改变,变成被破坏方块+1高度
用向量和将被破坏方块的向量和Y轴为1的向量加起来就可以了
(图我画不出来了,自行体会吧)
注意:将向量构造的参数1改为2,3就会变成破坏当前高度+2,+3高度的方块了
术式效果:
代码:
  1. <font face="微软雅黑">{spellName:"wwajue",uuidMost:-2450644148457813768L,validSpell:1b,spellList:[0:{data:{key:"selectorBlockBroken"},x:1,y:3},1:{data:{key:"constantNumber",constantValue:"5"},x:1,y:4},2:{data:{key:"constantNumber",constantValue:"1"},x:2,y:1},3:{data:{params:{_x:0,_y:1,_z:0},key:"operatorVectorConstruct"},x:2,y:2},4:{data:{params:{_vector3:0,_vector2:3,_vector1:1},key:"operatorVectorSum"},x:2,y:3},5:{data:{params:{_max:3,_target:4,_position:1},key:"trickBreakInSequence"},x:2,y:4},6:{data:{key:"selectorBlockBroken"},x:2,y:5},7:{data:{key:"constantNumber",constantValue:"6"},x:3,y:3},8:{data:{params:{_number2:1,_vector1:4},key:"operatorVectorMultiply"},x:3,y:4},9:{data:{params:{_max:2,_target:1,_position:3},key:"trickBreakInSequence"},x:3,y:5},10:{data:{key:"constantNumber",constantValue:"5"},x:3,y:6},11:{data:{params:{_target:4},key:"operatorVectorNegate"},x:4,y:4},12:{data:{key:"selectorBlockSideBroken"},x:5,y:4}],uuidLeast:-8023156209972816320L}</font>
复制代码


更新日志

  • 2018-8-21:正式发布,教程主体更新完成
  • 2018-8-22:全部更新完毕
  • 2018-8-23:修复了灵异现象,在后言里说了一大堆闲话
  • 2018-12-2:大幅度更新帖子排版,增加内容,删除后言
  • 2018-12-9:小幅调整改动
  • 2019-1-25:删掉了一个不科学的章节



[groupid=1645]Nuclear Fusion[/groupid]