Advertisement
Rain_Effect

BGM Script Alpha (Need Resource)

Aug 14th, 2019
1,058
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var BGM = {
  2.     key: 25, //BGM Controller Key, DefaultKey: P(25)
  3.     timer: 10, //BGM Timer ID, Default: 10
  4.     wait: 20, //BGM Start waiter time, Default: 20
  5.     sound: ["basedrum","bass","bell","chime","flute","guitar","harp","hat","pling","snare","xylophone"], //BGM Sound Mode
  6.     play: ["cycle", "cycle_once","order","random"], //BGM Play Mode
  7.     songs: //BGM Songs List
  8.     [
  9.         {
  10.             name: "Bad Apple", //BGM Song name
  11.             speed: 5, //BGM Song play speed
  12.             data: [5,7,8,10,12,-1,17,15,12,-1,5,-1,12,10,8,7,5,7,8,10,12,-1,10,8,7,5,7,8,7,5,3,7,5,7,8,10,12,-1,17,15,12,-1,5,-1,12,10,8,7,5,7,8,10,12,-1,10,8,7,-1,8,-1,10,-1,12,-1,5,7,8,10,12,-1,17,15,12,-1,5,-1,12,10,8,7,5,7,8,10,12,-1,10,8,7,5,7,8,7,5,3,7,5,7,8,10,12,-1,17,15,12,-1,5,-1,12,10,8,7,5,7,8,10,12,-1,10,8,7,-1,8,-1,10,-1,12,-1,15,17,12,10,12,-1,10,12,15,17,12,10,12,-1,10,12,10,8,7,3,5,-1,3,5,7,8,10,12,5,-1,10,12,15,17,12,10,12,-1,10,12,15,17,12,10,12,-1,10,12,10,8,7,3,5,-1,3,5,7,8,10,12,5,-1,10,12,15,17,12,10,12,-1,10,12,15,17,12,10,12,-1,10,12,10,8,7,3,5,-1,3,5,7,8,10,12,5,-1,10,12,15,17,12,10,12,-1,10,12,15,17,12,10,12,-1,17,19,20,19,17,15,12,-1,10,12,10,8,7,3,5,-1,10,12,15,17,12,10,12,-1,10,12,15,17,12,10,12,-1,10,12,10,8,7,3,5,-1,3,5,7,8,10,12,5,-1,10,12,15,17,12,10,12,-1,10,12,15,17,12,10,12,-1,10,12,10,8,7,3,5,-1,3,5,7,8,10,12,5,-1,10,12,15,17,12,10,12,-1,10,12,15,17,12,10,12,-1,10,12,10,8,7,3,5,-1,3,5,7,8,10,12,5,-1,10,12,15,17,12,10,12,-1,10,12,15,17,12,10,12,-1,17,19,20,19,17,15,12,-1,10,12,10,8,7,3,5,-1] //BGM Song data
  13.         }
  14.         }
  15.     ]
  16. };
  17.  
  18. function keyPressed(e){
  19.     if(e.key==BGM.key){
  20.         if(!e.player.storeddata.has("BGM")){
  21.             e.player.storeddata.put("BGM", reObj({sound:0,play:0,song:0,time:0,gui:false}));
  22.         }
  23.         updateGui(e.player.showChestGui(2), e);
  24.         reGui(e.player);
  25.     }
  26. }
  27.  
  28. function tick(e){
  29.     if(reObj(e.player.storeddata.get("BGM")).gui){
  30.         updateGui(e.player.openContainer, e);
  31.     }
  32. }
  33.  
  34. function customChestClicked(e){
  35.     var pt = e.player.timers;
  36.     var data = reObj(e.player.storeddata.get("BGM"));
  37.     switch (e.slot) {
  38.         case 37:
  39.             data.time = 0;
  40.             data.song --;
  41.             if(data.song<0) data.song += BGM.songs.length;
  42.             break;
  43.         case 40:
  44.             data.time = 0;
  45.             data.song ++;
  46.             if(data.song==BGM.songs.length) data.song = 0;
  47.             break;
  48.         case 38:
  49.             if(pt.has(BGM.timer)){
  50.                 pt.stop(BGM.timer);
  51.             }else{
  52.                 pt.forceStart(BGM.timer, 0, true);
  53.             }
  54.             break;
  55.         case 39:
  56.             if(pt.has(BGM.timer)){
  57.                 pt.stop(BGM.timer);
  58.             }
  59.             data.time = 0;
  60.             break;
  61.         case 42:
  62.             data.sound++;
  63.             if(data.sound == BGM.sound.length) data.sound=0;
  64.             break;
  65.         case 43:
  66.             data.play++;
  67.             if(data.play == BGM.play.length) data.play=0;
  68.             break;
  69.         default:
  70.             break;
  71.     }
  72.     e.player.storeddata.put("BGM", reObj(data));
  73.     updateGui(e.player.openContainer, e);
  74. }
  75.  
  76. function customChestClosed(e){
  77.     reGui(e.player);
  78. }
  79.  
  80. function updateGui(chest, e){
  81.     var w = e.API.getIWorld(0);
  82.     var data = reObj(e.player.storeddata.get("BGM"));
  83.     var song = BGM.songs[data.song];
  84.     chest.setName("BGM: " + (song.name));
  85.     var fill = w.createItem("minecraft:diamond_hoe", 1, 1);
  86.     fill.nbt.setInteger("HideFlags", 63);
  87.     fill.nbt.setInteger("Unbreakable", 1);
  88.     fill.nbt.setIntegerArray("AttributeModifiers", []);
  89.     fill.setCustomName("§r");
  90.     chest.setSlot(36, fill);
  91.     var temp = fill.copy();
  92.     temp.setItemDamage(7);
  93.     temp.setCustomName("§r[Prev Song]");
  94.     chest.setSlot(37, temp);
  95.     temp = fill.copy();
  96.     temp.setItemDamage(e.player.timers.has(BGM.timer)?4:3);
  97.     temp.setCustomName("§r[" + (e.player.timers.has(BGM.timer)?"Pause":"Play") + "]");
  98.     chest.setSlot(38, temp);
  99.     temp = fill.copy();
  100.     temp.setItemDamage(5);
  101.     temp.setCustomName("§r[Stop]");
  102.     chest.setSlot(39, temp);
  103.     temp = fill.copy();
  104.     temp.setItemDamage(6);
  105.     temp.setCustomName("§r[Next Song]");
  106.     chest.setSlot(40, temp);
  107.     chest.setSlot(41, fill);
  108.     temp = fill.copy();
  109.     temp.setItemDamage(data.sound + 25);
  110.     temp.setCustomName("§r[" + BGM.sound[data.sound] + "]");
  111.     chest.setSlot(42, temp);
  112.     temp = fill.copy();
  113.     temp.setItemDamage(data.play + 36);
  114.     temp.setCustomName("§r[" + BGM.play[data.play] + "]");
  115.     chest.setSlot(43, temp);
  116.     chest.setSlot(44, fill);
  117.     var SongTime = (song.data.length*song.speed+BGM.wait*2)/20;
  118.     var PlayTime = (data.time)/20;
  119.     var PlayBar = (PlayTime/SongTime)*9;
  120.     for(var i = 0; i<9; i++){
  121.         temp = fill.copy();
  122.         temp.setItemDamage(8);
  123.         if(PlayBar>i+1){
  124.             temp.setItemDamage(8+16);
  125.         }else if(PlayBar<i){
  126.             temp.setItemDamage(8);
  127.         }else{
  128.             temp.setItemDamage(8+Math.ceil((PlayBar-i)*16));
  129.         }
  130.         temp.setCustomName("§r" + reTime(PlayTime) + "§7/§r" + reTime(SongTime));
  131.         chest.setSlot(45+i, temp);
  132.     }
  133. }
  134.  
  135. function timer(e){
  136.     if(e.id==BGM.timer){
  137.         var pl = e.player;
  138.         var data = reObj(pl.storeddata.get("BGM"));
  139.         var song = BGM.songs[data.song];
  140.         var PlayTime = data.time-BGM.wait;
  141.         if(!(PlayTime%song.speed)){
  142.             if((song.data[PlayTime/song.speed]) && song.data[PlayTime/song.speed] != -1){
  143.                 pl.playSound("block.note." + BGM.sound[data.sound], 1, Math.pow(2, (song.data[PlayTime/song.speed]-12)/12));
  144.             }
  145.         }
  146.         data.time ++;
  147.         if(PlayTime>(song.data.length*song.speed+BGM.wait)){
  148.             data.time = 0;
  149.             switch (data.play){
  150.                 case 0:
  151.                     data.song ++;
  152.                     if(data.song==BGM.songs.length) data.song = 0;
  153.                     pl.sendNotification("Now Playing:", BGM.songs[data.song].name, 2);
  154.                     break;
  155.                 case 1:
  156.                     pl.sendNotification("Now Playing:", song.name, 2);
  157.                     break;
  158.                 case 2:
  159.                     if(data.song==BGM.songs.length-1){
  160.                         pl.timers.stop(BGM.timer);
  161.                     }else{
  162.                         data.song ++;
  163.                         if(data.song==BGM.songs.length) data.song = 0;
  164.                         pl.sendNotification("Now Playing:", BGM.songs[data.song].name, 2);
  165.                     }
  166.                     break;
  167.                 case 3:
  168.                     data.song = Math.floor(Math.random()*BGM.songs.length);
  169.                     if(data.song==BGM.songs.length) data.song --;
  170.                     pl.sendNotification("Now Playing:", BGM.songs[data.song].name, 2);
  171.                     break;
  172.                 default:
  173.                     break;
  174.             }
  175.         }
  176.         pl.storeddata.put("BGM", reObj(data));
  177.     }
  178. }
  179.  
  180. function reGui(pl){
  181.     var data = reObj(pl.storeddata.get("BGM"));
  182.     data.gui = !data.gui;
  183.     pl.storeddata.put("BGM", reObj(data));
  184. }
  185.  
  186. function reObj(value){
  187.     if(typeof value == "object"){
  188.         return JSON.stringify(value);
  189.     }else{
  190.         return JSON.parse(value);
  191.     }
  192. }
  193.  
  194. function reTime(value){
  195.     var sec = Math.ceil(value%60);
  196.     var min = (value-(value%60))/60;
  197.     if(sec<10)(sec = "0" + sec);
  198.     if(min<10)(min = "0" + min);
  199.     return min + ":" + sec;
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement