开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[BE教程] 一个利用标签保存数据的方法

头像被屏蔽
 发表于 2023-8-5 23:30:19 来自手机|显示全部楼层|阅读模式 IP:安徽省
我们都知道,在Script Api中,每次进入存档或者使用reload指令的时候,我们的变量都会初始化,保存数据,单看Script Api已经不够了,这时候就需要其他可以报错数据的东西了

我们知道,标签是个好东西,通过Script Api可以获取他,而且是字符串形式,长度也是近乎无限,利用JSON的俩个方法,使得它可以储存几乎所有数据,而且,还有一个好处,标签是跟实体绑定的。

接下来就是代码了,我从我自己写的代码里挑出一段

var InTag = {
Add:function(entity,tag){
entity.runCommand(`tag @s add "${tag}"`)
},
//为实体添加标签,tag为字符串,即要添加的标签
Remove:function(entity,tag){
entity.runCommand(`tag @s remove "${tag}"`)
},
//删除指定标签
Replace:function(entity,remove,add){
InTag.Remove(entity,remove)
InTag.Add(entity,add)
},
//替换标签,由于标签不能通过Script Api直接修改,所以需要替换,就相当于修改了
GetTagArray:function(entity,TagId){
let Tag = entity.getTags()
for(let t of Tag){
if(t.includes(TagId)){
return JSON.parse(t.replace(/¥/g,'"'))
}
}
},
//获取一个含有TagId的标签,转化后的对象,假如这个标签是通过下面的方法添加的话
SetTagArray:function(entity,TagId,Add = false,NewTag){
if(!Add){
InTag.Replace(entity,JSON.stringify(InTag.GetTagArray(entity,TagId)).replace(/"/g,'¥'),JSON.stringify(NewTag).replace(/"/g,'¥'))}
else{
let Tag = JSON.stringify(NewTag)
InTag.Add(entity,Tag.replace(/"/g,'¥'))
}
}
//NewTag就是要填入的对象了:object,同时也要指明TagId,毕竟一个实体可能会有多个标签
}
前面三个主要是为了随意的调换标签的,比较entity.addTag()的长度被限制在128了,这显然是不够的,所以就需要指令了,不过直接调用指令加标签的话,含有一些特殊字符就报错了,所以用""将被操作的标签包裹
至于为什么会用到replace(),是因为对象转字符串也含有",操作标签时依然会报错,所以需要用replace()将"替换掉

示例
假设有一个实体 entity
let a = {
id:entity.id + "1"
type:entity.typeId
}
InTag.SetTagArray(entity,entity.id + "1",true,a)
//因为是第一次,所以哪里填true,默认为false
InTag.GetTagArray(entity,entity.id + "1")
//返回定义的a
a["&$$"] = 1000
InTag.SetTagArray(entity,entity.id + "1",true,a)
InTag.GetTagArray(entity,entity.id + "1")
//返回
{
id:entity.id + "1"
type:entity.typeId
&$$:1000
}
苦力怕论坛,感谢有您~
头像被屏蔽
 楼主|  发表于 2023-8-5 23:30:52 来自手机|显示全部楼层 IP:安徽省
水个贴
2#2023-8-5 23:30:52回复收起回复
苦力怕论坛,感谢有您~
 发表于 2023-8-7 15:57:20|显示全部楼层 IP:四川省
学到了awa
3#2023-8-7 15:57:20回复收起回复
苦力怕论坛,感谢有您~

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供支持 | GMT+8, 2024-11-24 19:02

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号-3