Bot213123

flacon.js

Feb 28th, 2021 (edited)
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. IDRegistry.genItemID("flacon_for_souls");
  2. Item.createItem("flacon_for_souls", "Flacon for souls", {
  3.     name: "flacon_for_souls"
  4. }, {
  5.     stack: 1
  6. });
  7. mod_tip(ItemID.flacon_for_souls);
  8.  
  9. IDRegistry.genItemID("flacon_with_soul");
  10. Item.createItem("flacon_with_soul", "Flacon with soul", {
  11.     name: "flacon_with_soul"
  12. }, {
  13.     stack: 1
  14. });
  15. mod_tip(ItemID.flacon_with_soul);
  16.  
  17. Recipes.addShaped({
  18.     id: ItemID.flacon_for_souls,
  19.     count: 1,
  20.     data: 0
  21. }, [
  22.     " s ",
  23.     "g g",
  24.     " g "
  25. ], ['s', 158, -1, 'g', 20, 0]);
  26.  
  27. function createMobData(tag){
  28.     var isListTag = !tag.getAllKeys;
  29.     //Logger.Log('IsListTag: ' + isListTag, 'UtilsDebug');
  30.     var mobData = isListTag ? [] : {};
  31.     var keys = !isListTag ? tag.getAllKeys() : false;
  32.     var length_ = keys ? keys.length : tag.length();
  33.     if (keys != null) {
  34.         for (var _key = 0; _key < length_; _key++) {
  35.             var key = keys ? keys[_key] : _key;
  36.             //Logger.Log('Key: ' + key, 'UtilsDebug');
  37.             var keyType =  tag.getValueType(key);
  38.             var _data = {type: keyType};
  39.             switch (keyType) {
  40.                 case 1:
  41.                     _data.value = Number(tag.getByte(key));
  42.                     break;
  43.                 case 2:
  44.                     _data.value = Number(tag.getShort(key));
  45.                     break;
  46.                 case 3:
  47.                     _data.value = Number(tag.getInt(key));
  48.                     break;
  49.                 case 4:
  50.                     _data.value = Number(tag.getInt64(key));
  51.                     break;
  52.                 case 5:
  53.                     _data.value = Number(tag.getFloat(key));
  54.                     break;
  55.                 case 6:
  56.                     _data.value = Number(tag.getDouble(key));
  57.                     break;
  58.                 case 7:
  59.                     _data.value = '';
  60.                     break;
  61.                 case 8:
  62.                     _data.value = tag.getString(key) + "";
  63.                     break;
  64.                 case 9:
  65.                     var listTag = tag.getListTag(key);
  66.                     if (listTag != null) {
  67.                         _data.value = createMobData(listTag)
  68.                     } else {
  69.                         _data.value = [];
  70.                     }
  71.                     break;
  72.                 case 10:
  73.                     var compoundTag = tag.getCompoundTag(key);
  74.                     if (compoundTag != null) {
  75.                         _data.value = createMobData(compoundTag)
  76.                     } else {
  77.                         _data.value = {};
  78.                     }
  79.                     break;
  80.                 case 11:
  81.                     _data.value = '';
  82.                     break;
  83.             }
  84.             //Logger.Log('Data: ' + JSON.stringify(_data), 'UtilsDebug');
  85.             mobData[key] = _data;
  86.         }
  87.     }
  88.     return mobData;
  89. }
  90.  
  91. function createMobTag(tag_json){
  92.     var isListTag = Array.isArray(tag_json);
  93.     Logger.Log('IsListTag: ' + isListTag, 'UtilsDebug');
  94.     var tag = isListTag ? new NBT.ListTag() : new NBT.CompoundTag();
  95.     for (var key in tag_json) {
  96.         Logger.Log('Key: ' + key, 'UtilsDebug');
  97.         var _data = tag_json[key];
  98.         switch (_data.type) {
  99.             case 1:
  100.                 tag.putByte(key, _data.value);
  101.                 break;
  102.             case 2:
  103.                 tag.putShort(key, _data.value);
  104.                 break;
  105.             case 3:
  106.                 tag.putInt(key, _data.value);
  107.                 break;
  108.             case 4:
  109.                 tag.putInt64(key, _data.value);
  110.                 break;
  111.             case 5:
  112.                 tag.putFloat(key, _data.value);
  113.                 break;
  114.             case 6:
  115.                 tag.putDouble(key, _data.value);
  116.                 break;
  117.             case 8:
  118.                 tag.putString(key, _data.value);
  119.                 break;
  120.             case 9:
  121.                 Logger.Log('Pushing listTag: ' + JSON.stringify(_data.value), 'UtilsDebug');
  122.                 var newTag = createMobTag(_data.value);
  123.                 Logger.Log('New listTag: ' + JSON.stringify(newTag.toScriptable()), 'UtilsDebug');
  124.                 Logger.Log('New listTag: ' + newTag, 'UtilsDebug');
  125.                 tag.putListTag(key, newTag);
  126.                 break;
  127.             case 10:
  128.                 Logger.Log('Pushing compoundTag: ' + JSON.stringify(_data.value), 'UtilsDebug');
  129.                 var newTag = createMobTag(_data.value);
  130.                 Logger.Log('New compoundTag: ' + JSON.stringify(newTag.toScriptable()), 'UtilsDebug');
  131.                 Logger.Log('New compoundTag: ' + newTag, 'UtilsDebug');
  132.                 tag.putCompoundTag(key, newTag);
  133.                 break;
  134.         }
  135.     }
  136.     return tag;
  137. }
  138.  
  139. Item.registerNoTargetUseFunction("flacon_for_souls", function(item, _player) {
  140.     var data = getPointed();
  141.     if (data.entity != -1) {
  142.         var mobData = createMobData(Entity.getCompoundTag(data.entity));
  143.         Entity.remove(data.entity);
  144.         var extra = new ItemExtraData();
  145.         extra.putString("entity", JSON.stringify(mobData));
  146.         var player = new PlayerActor(_player);
  147.         player.setInventorySlot(player.getSelectedSlot(), ItemID.flacon_with_soul, 1, 0, extra);
  148.     }
  149. })
  150.  
  151. Item.registerUseFunction("flacon_with_soul", function(coords, item, block, player) {
  152.     var extra = new ItemExtraData(item.extra);
  153.     if (!(entityTag = createMobTag(JSON.parse(extra.getString("entity"))))) return;
  154.     _playerActor = new PlayerActor(player);
  155.     var newCoords = {
  156.         x: coords.x + 0.5,
  157.         y: coords.y + 1,
  158.         z: coords.z + 0.5
  159.     }
  160.     var newEntity = Entity.spawnAtCoords(newCoords, entity.type);
  161.     Debug.big(entityTag.toSciptable());
  162.     Entity.setCompoundTag(newEntity, entityTag);
  163.     _playerActor.setInventorySlot(_playerActor.getSelectedSlot(), ItemID.flacon_for_souls, 1, 0);
  164. })
Add Comment
Please, Sign In to add comment