// ==UserScript==
// @name box3plus合规版
// @version 0.0.12.230104
// @description box3plus合规版,不含任何违规内容
// @author _async_function_
// @match https://preprod.box3.codemao.cn/*
// @match https://box3.codemao.cn/*
// @match https://box3.fun/*
// @icon https://static.box3.codemao.cn/img/QmUX51Fo1NTRP5H4cQa4UMcTCP7ZhyDwLvQsKM2zbStdMJ_520_216_cover.avif
// @grant GM_xmlhttpRequest
// @require https://cdn.jsdelivr.net/npm/lil-gui@0.16
// @require https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js
// @namespace https://greasyfork.org/zh-CN/users/942818-async-function
// @license GPL-3.0-only
// ==/UserScript==
'use strict';
function sleep(ms) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('sleep end');
resolve();
}, ms);
});
}
(async function main() {
function load() {
try {
if (window.location.href.includes('/p/')) {
var box3CoreElement = document.querySelector('#react-container');
var reactNodeName = Object.keys(box3CoreElement).filter(function (v) {
return v.includes('reactContain');
})[0];
var core =
box3CoreElement[reactNodeName].updateQueue.baseState.element.props.children
.props.children.props;
window.core = core;
}
if (window.location.href.includes('/e/')) {
document.func = document.querySelector('.desktop')._reactRootContainer._internalRoot.current.updateQueue.baseState.element.props.children.props.children.props;
}
return true;
} catch (e) {
console.warn(e);
return undefined;
}
}
async function waitLoad() {
while (true) {
if (load()) {
load();
break;
}
await sleep(100);
}
console.log('box3plus加载完毕');
}
var tips = {
'tips': function () {
alert('az,这是合规版,此功能已关闭');
},
};
var time = {
'switch': function () {
if (window.location.href.includes('preprod')) {
alert('即将跳转至当前版本');
window.location.href = 'https://box3.codemao.cn';
} else {
alert('即将跳转至远古版本');
window.location.href = 'https://preprod.box3.codemao.cn';
}
},
};
var CodemaoCloudTool = {
'upload': function() {
var input = document.createElement('input');
input.type = 'file';
input.style.display = 'none';
input.addEventListener('change', () => {
uploadButton.disable();
let reader = new FileReader();
reader.addEventListener('load', () => {
GM_xmlhttpRequest({
method: 'post',
url: 'https://static.box3.codemao.cn/block',
data: reader.result,
binary: true,
onload({ response }) {
var { Key, Size } = JSON.parse(response);
alert(
'上传成功!\n\nHash: ' +
Key +
'\n\n Size:' +
Size +
'\n\n即将跳转,请稍等'
);
uploadButton.enable();
input.remove();
window.open('https://static.box3.codemao.cn/block/' + Key);
},
});
});
reader.readAsBinaryString(input.files[0]);
});
input.click();
},
};
window.gui = new lil.GUI({ title: '🧰box3plus合规版' });
gui.add(time, 'switch').name('切换版本');
var CodemaoCloud = gui.addFolder('Codemao Cloud ©2022 Edgar_勿安').close();
var uploadButton = CodemaoCloud.add(CodemaoCloudTool, 'upload').name('上传文件');
if (window.location.href.includes('/p/')) {
await waitLoad();
while (true) {
if (core.state.box3.loading.appLoaded) break;
await sleep(100);
}
var map = {
'大小': function () {
alert('地图尺寸为:' + core.state.box3.state.voxel.shape);
},
'展示图': function () {
var pictures = core.state.prevUIState.gameInfo.banner;
pictures.forEach(function (pic, index) {
var text = 'https://static.box3.codemao.cn/block/' + pic;
document.write('<p>展示图' + String(index + 1) + ':' + text.link(text) + '</p>');
});
},
};
var player = {
'发送': function () {
var content = prompt('请输入消息');
if(content.length < 500) core.state.box3.chat.sendMessage(content);
else alert('消息过长!');
},
};
gui.title('🧰box3plus合规版(playMode)');
var page1 = gui.addFolder('地图');
page1.add(map, '大小').name('地图尺寸');
page1.add(map, '展示图').name('爬取展示图');
var page2 = gui.addFolder('玩家');
var page2_1 = page2.addFolder('通用');
page2_1.add(player, '发送').name('发送长文本');
} else if (window.location.href.includes('/e/')) {
await waitLoad();
document.func.onStart();
var map = {};
var code = {};
gui.title('🧰box3plus合规版(editMode)');
window.gui.domElement.style.top = 'unset';
window.gui.domElement.style.bottom = '0';
window.gui.domElement.style.userSelect = 'none';
} else if (window.location.href.includes('me/content')) {
async function creat(hash, size) {
axios({
method: 'post',
url: 'https://backend.box3.fun/container/create-game-edit',
data: JSON.parse(`{"image":"Qmdkqjkx8YXCEzQuNrZhEr75dpRGHcWY7oiCxg5oQqfzox.png","name":"空白的地图(${size}) (未激活)","describe":"${size}","hash":"${hash}","resourceId":0}`),
withCredentials: true
})
.then(({
request
}) => {
console.log(JSON.parse(request.responseText)['data']['value'].slice(5));
});
location.reload();
}
var create = {
'704': function () {
if (confirm('确认创建256*256*704地图?')) {
creat('QmTuELNrZixUHYytsqJAUCw8R22868ePtkNCQ4DMUd8wCg', '256*256*704');
}
},
'1024': function () {
if (confirm('确认创建1024*64*1024地图?')) {
creat('QmNorKXGb2RwP3KRQBpkH2vfJJ4ziva5qMc1cU6SJyBSTa', '1024*64*1024');
}
},
};
var custom = {
'x': 64,
'y': 64,
'z': 64,
'pg': false,
create: function () {
async function fetchVoxels(x, y, z) {
var ret;
if (x * y * z < 32768 || x * y * z > 67108864 || (x * y * z % 32768 != 0)) {
alert('数值错误!');
return null;
}
var chunks = new Array(x * y * z / 32768).fill('"QmYUffAgALxiUQonbhAVXjknTq3dNf3AfHQGQ8P5xny7TU"');
var voxels = `{"chunks": [${chunks}],"shape": {"x": ${x},"y": ${y},"z": ${z}}}`;
console.log('chunk=' + chunks.length);
return fetch('https://static.box3.codemao.cn/block/', { method: 'POST', body: voxels });
}
var { x, y, z, pg } = custom;
fetchVoxels(x, y, z)
.then(response => {
var res = response.json();
return res;
})
.then(result => result.Key)
.then(async function (voxelsHash) {
console.log('voxelhash=' + voxelsHash);
if (voxelsHash == null) return;
if (!confirm("提示:确认创建?")) return;
var hash;
var sql;
var date = new Date();
var time = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${date.getHours()}:${date.getMinutes()}:00.000Z`;
if (pg) {
sql = 'pg';
} else {
sql = 'sqlite';
}
var mpbody = `{"ambientSound":"QmcNbLSSQfVcDpH9jSX38RSVrL1SZK3vNMZwaP7cMkKqvY","assets":"QmdEyTaW4uENRCGu9cSUPFNDH5vJRX8n4BxtJYuzVs2kn1","collisionFilter":[],"committerId":0,"deleteAssets":"QmTgK2uYPscacJ9KaBS8tryXRF5mvjuRbubF7h9bG2GgoN","editRoot":"QmTgK2uYPscacJ9KaBS8tryXRF5mvjuRbubF7h9bG2GgoN","entities":"QmSvPd3sHK7iWgZuW47fyLy4CaZQe2DwxvRhrJ39VpBVMK","environment":"QmRC98696VxEVsScYsChTzU2uDguFBboruxKYhwtFnAPK7","features":{"enableTriggerAPI":true},"folders":"QmSvPd3sHK7iWgZuW47fyLy4CaZQe2DwxvRhrJ39VpBVMK","info":"QmXNsFZxmhdfyMbdc6BaoDgkfWAjgbPGrps3UNk3tJLNiR","physics":"QmTzt6Z6Mm11NQjTeXspDMJtddzDadzwhgwfWUtNG5XCrD","player":"QmWQFyBpZtExUarsF59BJqscyBebfM4nzWE45uo5tV8mvR","prevHash":"QmP2c7LxFD2j2EBk6inaDhhBE2DuuQ2TLtJRNpKXLyvbuL","scriptAssets":"QmRMAD8RuRMvKXr2EQ4WtGmoFsg4gf67qrGemGTQ7may93","scriptIndex":"index.js","storageMode":"${sql}","timestamp":"${time}","type":"project","version":"0.3.11","voxels":"${voxelsHash}","zones":"QmTgK2uYPscacJ9KaBS8tryXRF5mvjuRbubF7h9bG2GgoN"}`;
await fetch('https://static.box3.codemao.cn/block/', { method: 'POST', body: mpbody }).then(async function (response) {
var k = await response.json();
hash = k.Key;
console.log(hash);
}).catch(function () {
console.log('catch')
});
console.log(hash)
creat(hash, `${x}*${y}*${z}的地图`)
});
}
};
window.gui.domElement.style.top = 'unset';
window.gui.domElement.style.bottom = '0';
window.gui.domElement.style.userSelect = 'none';
var page1 = gui.addFolder('创建地图');
var page1_1 = page1.addFolder('创建超大地图');
page1_1.add(create, '704').name('创建256*256*704地图');
page1_1.add(create, '1024').name('创建1024*64*1024地图');
var page1_2 = page1.addFolder('自定义地图');
page1_2.add(custom, 'x', 1, 2048, 1).name('x');
page1_2.add(custom, 'y', 1, 2048, 1).name('y');
page1_2.add(custom, 'z', 1, 2048, 1).name('z');
page1_2.add(custom, 'pg').name('使用pg数据库?');
page1_2.add(custom, 'create').name('创建');
}
})();