IC Save Instances

Makes Infinite Craft save instances

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name         IC Save Instances
// @namespace    http://tampermonkey.net/
// @version      1.0
// @license      MIT
// @description  Makes Infinite Craft save instances
// @icon         https://i.imgur.com/WlkWOkU.png
// @author       @activetutorial on discord
// @match        https://neal.fun/infinite-craft/
// @run-at       document-end
// @grant        none
// ==/UserScript==

(function () {
    'use strict';
    (window.AT ||= {}).saveinstances = {
        infinitecraft: null,
        saveItems: function () {
            localStorage.setItem(
                "infinite-craft-data",
                JSON.stringify({
                    elements: this.elements,
                    instances: this.instances,
                    darkMode: this.isDarkMode,
                })
            );
        },
        loadInstances: function () {
            const savedItems = JSON.parse(
                localStorage.getItem("infinite-craft-data")
            );
            const instances = savedItems.instances;
            this.infinitecraft.instances = [];
            instances?.forEach(this.infinitecraft.duplicateInstance);
        },
        start: function () {
            if (document.querySelector(".container").__vue__) { // Wait for Nuxt
                this.infinitecraft = document.querySelector(".container").__vue__;
                this.infinitecraft.saveItems = this.saveItems;
                this.loadInstances();
                const originalPlay = window.Howl.prototype.play;
                window.Howl.prototype.play = function(...args) {
                    const result = originalPlay.apply(this, args);
                    window.AT.saveinstances.infinitecraft.saveItems();
                    return result;
                };
                const originalDropElement = this.infinitecraft.dropElement;
                this.infinitecraft.dropElement = function(...args) {
                    const result = originalDropElement.apply(this, args);
                    window.AT.saveinstances.infinitecraft.saveItems();
                    return result;
                }
            } else {
                setTimeout(this.start.bind(this), 200);
            }
        }
    };
    window.AT.saveinstances.start();
})();