Rain_Effect

目标指引条[1.12.2] v1.0

May 28th, 2019
561
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //假设的目标坐标
  2. var x=8.5;
  3. var y=5;
  4. var z=14.5;
  5.  
  6. //指引条刷新延时,0为实时
  7. //注意: 启动时会大量发送信息包,请斟酌设置
  8. //不建议高于10,否则体验较差
  9. var ti=0;
  10.  
  11. function timer(e){
  12.     if(e.id == 61){
  13.         //记录当前玩家坐标
  14.         var px = e.player.getX();
  15.         var py = e.player.getY();
  16.         var pz = e.player.getZ();
  17.         //计算两点的平面角度差
  18.         var ts = Math.atan2((x-px),(z-pz))*(180/Math.PI);
  19.         //获取玩家当前朝向角度
  20.         var tr = e.player.getRotation();
  21.         //计算朝向下的角度差
  22.         var tp = (tr>0?tr-360:tr) + (ts<0?ts+360:ts);
  23.         if(tp<-180){
  24.             tp = tp+360;
  25.         }else if(tp>180){
  26.             tp = tp-360;
  27.         }
  28.         //构建指引条文本
  29.         var tc = "§r[";
  30.         for(var i = -10;i<10;i++){
  31.             if(i==0) tc = tc + "§a|";
  32.             if(((i==-10||i==9) && Math.abs(tp)>105) || (tp>((-i-1)*10-5) && tp<((-i+1)*10-5))){
  33.                 tc = tc + "§e-";
  34.             }else{
  35.                 tc = tc + "§7-";
  36.             }
  37.         }
  38.         //结束构建并计算三维空间下两点距离并向上取整
  39.         tc = tc + "§r] " + Math.ceil(Math.sqrt(Math.abs((x-px)*(x-px)+(y-py)*(y-py)+(z-pz)*(z-pz)))) + "m";
  40.         //输出指引条
  41.         e.API.executeCommand(e.player.world, "/title " + e.player.getDisplayName() + " actionbar {\"text\":\"" + tc + "\"}");
  42.     }
  43. }
  44.  
  45. function keyPressed(e){
  46.     //当玩家单击~键运行
  47.     if(e.key==41){
  48.         //如果已启动指引条
  49.         if(e.player.timers.has(61)){
  50.             //停止指引条并清空信息
  51.             e.player.timers.reset(61);
  52.             e.player.timers.stop(61);
  53.             e.API.executeCommand(e.player.world, "/title " + e.player.getDisplayName() + " actionbar {\"text\":\"\"}");
  54.         }else{
  55.             //启动指引条
  56.             e.player.timers.forceStart(61,ti,true);
  57.         }
  58.     }
  59. }
RAW Paste Data