🎉 Infinite Craft Plus
This commit is contained in:
parent
0e9e91bf60
commit
63048a34ea
1 changed files with 143 additions and 0 deletions
143
infinite-craft-plus.user.js
Normal file
143
infinite-craft-plus.user.js
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
// ==UserScript==
|
||||
// @name Infinite Craft Plus
|
||||
// @namespace danielrayjones
|
||||
// @match https://neal.fun/infinite-craft/
|
||||
// @grant none
|
||||
// @version 0.0.1
|
||||
// @author Dan Jones
|
||||
// @description 2024-01-06T14:13:00-0500
|
||||
// ==/UserScript==
|
||||
|
||||
/* global window, localStorage, FileReader */
|
||||
|
||||
(function () {
|
||||
const key = "infinite-craft-data";
|
||||
|
||||
function getData() {
|
||||
return localStorage.getItem(key);
|
||||
}
|
||||
|
||||
function downloadData() {
|
||||
const data = getData();
|
||||
|
||||
const dl = document.createElement('a');
|
||||
dl.href = 'data:application/json,' + data;
|
||||
dl.download = 'infinite-craft.json';
|
||||
|
||||
dl.click();
|
||||
}
|
||||
|
||||
function getParsedData() {
|
||||
return JSON.parse(getData());
|
||||
}
|
||||
|
||||
function getElements() {
|
||||
return getParsedData().elements;
|
||||
}
|
||||
|
||||
function overwriteElements(newElements) {
|
||||
const data = getParsedData();
|
||||
const old = data.elements;
|
||||
data.elements = newElements;
|
||||
|
||||
localStorage.setItem(key, JSON.stringify(data));
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
function addElements(newElements) {
|
||||
const els = getElements();
|
||||
|
||||
for (let i = 0; i < newElements.length; i++) {
|
||||
const newEl = newElements[i];
|
||||
const found = els.find(el => el.text === newEl.text);
|
||||
if (found) {
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log('Adding', newEl);
|
||||
|
||||
els.push(newEl);
|
||||
}
|
||||
|
||||
return overwriteElements(els);
|
||||
}
|
||||
|
||||
function uploadElements(evt) {
|
||||
evt.preventDefault();
|
||||
const files = evt.target.uploads.files;
|
||||
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const file = files[i];
|
||||
const read = new FileReader();
|
||||
read.addEventListener('load', function () {
|
||||
const body = read.result;
|
||||
const els = JSON.parse(body)?.elements;
|
||||
addElements(els);
|
||||
});
|
||||
read.readAsText(file);
|
||||
}
|
||||
|
||||
const sub = evt.target.lastChild;
|
||||
sub.disabled = true;
|
||||
sub.setAttribute('value', '✅');
|
||||
}
|
||||
|
||||
function getUploadButton() {
|
||||
const f = document.createElement('form');
|
||||
f.style.display = 'inline';
|
||||
|
||||
const ups = document.createElement('input');
|
||||
ups.setAttribute('type', 'file');
|
||||
ups.setAttribute('name', 'uploads');
|
||||
ups.setAttribute('accept', '.json');
|
||||
ups.setAttribute('required', true);
|
||||
f.appendChild(ups);
|
||||
|
||||
f.addEventListener('submit', uploadElements);
|
||||
|
||||
const sub = document.createElement('input');
|
||||
sub.setAttribute('type', 'submit');
|
||||
sub.setAttribute('value', 'Upload');
|
||||
f.appendChild(sub);
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
function getDownloadButton() {
|
||||
const butt = document.createElement('button');
|
||||
butt.innerText = '⤵️';
|
||||
butt.addEventListener('click', downloadData);
|
||||
|
||||
return butt;
|
||||
}
|
||||
|
||||
function addButtons() {
|
||||
const target = document.querySelector('.site-title')?.parentElement;
|
||||
if (!target) {
|
||||
console.log("Can't find .site-title");
|
||||
return null;
|
||||
}
|
||||
|
||||
const span = document.createElement('span');
|
||||
const down = getDownloadButton();
|
||||
const up = getUploadButton();
|
||||
span.appendChild(down);
|
||||
span.appendChild(up);
|
||||
|
||||
const next = target.nextElementSibling;
|
||||
console.log('inserting', span, 'before', next);
|
||||
target.style.display = 'none';
|
||||
|
||||
return target.parentElement.insertBefore(span, next);
|
||||
}
|
||||
|
||||
window.Game = window.Game || {};
|
||||
|
||||
window.Game.getData = getElements;
|
||||
window.Game.download = downloadData;
|
||||
|
||||
window.addEventListener('load', () => console.log(addButtons()));
|
||||
|
||||
})();
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue