IC Save Instances

Makes Infinite Craft save instances

  1. // ==UserScript==
  2. // @name IC Save Instances
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @license MIT
  6. // @description Makes Infinite Craft save instances
  7. // @icon https://i.imgur.com/WlkWOkU.png
  8. // @author @activetutorial on discord
  9. // @match https://neal.fun/infinite-craft/
  10. // @run-at document-end
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. (function () {
  15. 'use strict';
  16. (window.AT ||= {}).saveinstances = {
  17. infinitecraft: null,
  18. saveItems: function () {
  19. localStorage.setItem(
  20. "infinite-craft-data",
  21. JSON.stringify({
  22. elements: this.elements,
  23. instances: this.instances,
  24. darkMode: this.isDarkMode,
  25. })
  26. );
  27. },
  28. loadInstances: function () {
  29. const savedItems = JSON.parse(
  30. localStorage.getItem("infinite-craft-data")
  31. );
  32. const instances = savedItems.instances;
  33. this.infinitecraft.instances = [];
  34. instances?.forEach(this.infinitecraft.duplicateInstance);
  35. },
  36. start: function () {
  37. if (document.querySelector(".container").__vue__) { // Wait for Nuxt
  38. this.infinitecraft = document.querySelector(".container").__vue__;
  39. this.infinitecraft.saveItems = this.saveItems;
  40. this.loadInstances();
  41. const originalPlay = window.Howl.prototype.play;
  42. window.Howl.prototype.play = function(...args) {
  43. const result = originalPlay.apply(this, args);
  44. window.AT.saveinstances.infinitecraft.saveItems();
  45. return result;
  46. };
  47. const originalDropElement = this.infinitecraft.dropElement;
  48. this.infinitecraft.dropElement = function(...args) {
  49. const result = originalDropElement.apply(this, args);
  50. window.AT.saveinstances.infinitecraft.saveItems();
  51. return result;
  52. }
  53. } else {
  54. setTimeout(this.start.bind(this), 200);
  55. }
  56. }
  57. };
  58. window.AT.saveinstances.start();
  59. })();