HimDSL 1.0
HimDSL v1.0底层修复与新功能
版本简介
本次为虚拟机底层关键性更新,集中修复字符串缺陷、函数调用栈、新增内置容器(栈、队列、Map字典),补齐基础语言能力。
本次更新是开发占位符解析、复杂递归算法、批量数据处理脚本的核心基础版本。
✨新增功能
内置容器库
@BukkitRunnable注解 不需要在main()里调用函数,会自己执行。
@Deprecated注解
支持注册定时任务。
提供了一部分占位符支持。大部分支持+将会支持的占位符:
占位符列表:占位符
player系占位符
引用方式;$player(<玩家变量名>,<属性>)$ 或者$p(<玩家变量名>,<属性>)$
属性:
Int x 获取玩家的X坐标。
Int y 获取玩家的Y坐标。
Int z 获取玩家的Z坐标。
Double yaw 获取玩家的视角。
Double pitch 获取玩家的视角。
Double hp 获取玩家生命值。
Double hungry 获取玩家的饱食度。
Bool openGui 玩家是否打开GUI页面(包括工具方块提供的GUI和其他命令调出的GUI)
Bool handleJoin 玩家加入
Bool handleLeave 玩家离开
String breakType 最后一次破坏的方块类型
Int[3] breakPos 最后一次的破坏位置
String buildType 最后一次放置的方块类型
Int[3] buildPos 最后一次的放置位置
String runCommnad 最后一次使用的命令
String name 玩家名
String uuid 玩家的UUID
String slot[某一个ID] 玩家物品栏
String mainhand 主手物品
String offhand 副手物品
Bool isSneaking:玩家是否潜行,很多跑酷和躲猫猫需要
Bool isSprinting:玩家是否疾跑
String gamemode:玩家游戏模式,用于权限判断
Int expLevel:经验等级,RPG 小游戏常用
String world:玩家所在世界名,多世界小游戏必备
引用方式:$boss(<属性>)$或者$b(属性)$
属性包括 x,y,z,yaw,pitch,world
rand类占位符
引用方式:直接调用。
rand() 同C++里面的那个rand()举例:var a=rand();
int rand(int,int) 在范围内选一个整数
double rand(double,double) 在范围内选一个浮点数
double randChoose(number,number,number……) 随机选一个返回
world类占位符
引用方式:$world(<属性>)$ 或者$w(<属性>)$
属性:
String name 世界名
String block[][][] 某个位置的方块类型(Material 枚举名)
Bool isContainer[][][] 某个位置的方块是否是容器
String contain[x][y][z][slot] 某个位置的容器的某一格的内容。
Bool hasPlayer(String世界名) 某个世界有无玩家
server类占位符
引用方式:$server(<属性>)$或者$s(<属性>)$
属性:
Double tps 服务器当前tps
Double mspt 服务器当前的mspt
Double ping(String) 某个玩家的延迟
Bool ServerLoadEvent
Bool ServerCloseEvent
Bool onPluginEnable
Bool onPluginDisable
引用方式:直接使用
runcmd(<执行者>,<String原版命令>);
执行者可以是 “CONSOLE”,或者 “$player(<玩家变量名>,name)$”
命令可以是服务器支持的任何命令。
变量:只提供$haveVar(<变量名>)$检测有没有该变量存在。
示例脚本1:玩家占位符
`int main(){
player p = @p[limit=1];
// 玩家信息
runcmd("CONSOLE","say 玩家: " + $player(p,name)$);
runcmd("CONSOLE","say 坐标: " + $player(p,x)$ + ", " + $player(p,y)$ + ", " + $player(p,z)$);
runcmd("CONSOLE","say 血量: " + $player(p,hp)$);
runcmd("CONSOLE","say 饥饿度: " + $player(p,hungry)$);
// 世界信息
var worldName = $world(name)$;
runcmd("CONSOLE","say 当前世界: " + worldName);
runcmd("CONSOLE","say 方块类型(0,64,0): " + $world(block, 0, 64, 0)$);
// 服务器信息
runcmd("CONSOLE","say 当前TPS: " + $server(tps)$);
runcmd("CONSOLE","say MSPT: " + $server(mspt)$);
}示例脚本2:随机数int main(){
int a=rand();
int b=rand(10,1000);
double c = 20.0 + rand() * (57.3 - 20.0);
runcmd("CONSOLE","say a,b,c="+a+" "+b+" "+c);
}示例脚本3:玩家加入监听器int main(){
runcmd("CONSOLE","say 启动玩家在线检测,每2秒检查一次");
// main 立即结束,定时任务接管
}
@BukkitRunnable void report() sche=2s{
if($world(hasPlayer, $world(name)$)$){
runcmd("CONSOLE","say 当前有玩家在线");
} else {
runcmd("CONSOLE","say 当前无玩家在线");
}
}`
注意:由于注解会使用@,下面的贡献者都不要相信,本项目只有本人单独开发。