您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
tracks how you made things in infinite craft. no ui yet so just look at the storage data directly
当前为
- // ==UserScript==
- // @name infinite craft combo tracker
- // @namespace https://github.com/adrianmgg
- // @version 1.0.0
- // @description tracks how you made things in infinite craft. no ui yet so just look at the storage data directly
- // @author amgg
- // @match https://neal.fun/infinite-craft/
- // @icon https://neal.fun/favicons/infinite-craft.png
- // @grant unsafeWindow
- // @grant GM_setValue
- // @grant GM_getValue
- // @run-at document-idle
- // @compatible chrome
- // @license MIT
- // ==/UserScript==
- // TODO test on firefox
- (function() {
- 'use strict';
- const GM_VALUE_KEY = 'infinitecraft_observed_combos';
- // TODO this should probably use the async versions of getvalue/setvalue since we're already only calling it from async code
- function saveCombo(lhs, rhs, result) {
- const data = GM_getValue(GM_VALUE_KEY, {});
- if(!(result in data)) data[result] = [];
- for(const [a, b] in data[result]) {
- if(a === lhs && b === rhs) return;
- }
- data[result].push([lhs, rhs]);
- GM_setValue(GM_VALUE_KEY, data);
- }
- function main() {
- const _getCraftResponse = unsafeWindow.$nuxt._route.matched[0].instances.default.getCraftResponse;
- unsafeWindow.$nuxt._route.matched[0].instances.default.getCraftResponse = async function(lhs, rhs) {
- const resp = await _getCraftResponse.apply(this, arguments);
- saveCombo(lhs.text, rhs.text, resp.result);
- return resp;
- }
- }
- // need to wait for stuff to be actually initialized.
- // might be an actual thing we can hook into to detect that
- // but for now just waiting until the function we want exists works well enough
- (function waitForReady(){
- const cur = unsafeWindow?.$nuxt?._route?.matched?.[0]?.instances?.default?.getCraftResponse;
- const ready = cur !== undefined && cur !== null;
- if(ready) main();
- else setTimeout(waitForReady, 10);
- })();
- })();