import { world, system } from '@minecraft/server';
const stgpref = 'data_server';
const maxm = 5;
const chksz = 32000;
const appsz = 10000;
function getm() {
const m = [];
for (let i = 1; i <= maxm; i++) {
const t = stgpref + i;
const e = world.getDimension('overworld').getEntities({
type: 'minecraft:armor_stand',
tags: [t]
});
if (e.length > 0) {
m.push({ mob: e[0], idx: i });
} else {
m.push(null);
}
}
return m;
}
function svd(d) {
const m = getm();
const c = [];
for (let i = 0; i < d.length; i += chksz) {
c.push(d.substring(i, i + chksz));
}
if (c.length > maxm) {
return false;
}
for (let i = 0; i < c.length; i++) {
const mi = m[i];
if (!mi) {
return false;
}
mi.mob.setDynamicProperty('data', c[i]);
}
for (let i = c.length; i < maxm; i++) {
if (m[i]) {
m[i].mob.setDynamicProperty('data', undefined);
}
}
return true;
}
function ldd() {
const m = getm();
const p = [];
for (const mi of m) {
if (!mi) continue;
const d = mi.mob.getDynamicProperty('data');
if (d !== undefined && d !== null && d !== '') {
p.push(d);
}
}
return p.length > 0 ? p.join('') : null;
}
function gtsz() {
let t = 0;
const m = getm();
for (const mi of m) {
if (!mi) continue;
const d = mi.mob.getDynamicProperty('data');
if (d) t += d.length;
}
return t;
}
function shinf() {
const m = getm();
let msg = 'DAT ser\n';
let t = 0;
for (const mi of m) {
if (!mi) {
msg += `${stgpref}?\n`;
continue;
}
const d = mi.mob.getDynamicProperty('data');
const u = d ? d.length : 0;
msg += `${stgpref}${mi.idx}: ${u}/${chksz} byte (${(u / 1024).toFixed(1)} KB)\n`;
t += u;
}
msg += `tot: ${t} byte, ${(t / 1024).toFixed(1)} KB`;
world.sendMessage(msg);
}
function rndstr(l) {
const c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let r = '';
for (let i = 0; i < l; i++) {
r += c.charAt(Math.floor(Math.random() * c.length));
}
return r;
}
function appnd() {
const m = getm();
for (const mi of m) {
if (!mi) {
world.sendMessage('Создать всех data_server');
return;
}
}
let ed = ldd();
let o;
if (ed) {
try {
o = JSON.parse(ed);
} catch (e) {
world.sendMessage('error data');
o = {};
}
} else {
o = {};
}
let fi = 0;
while (o.hasOwnProperty('field' + fi)) {
fi++;
}
o['field' + fi] = rndstr(appsz);
const js = JSON.stringify(o);
const ms = maxm * chksz;
if (js.length > ms) {
world.sendMessage(`result (${js.length} byte) limit (${ms} byte)`);
return;
}
if (svd(js)) {
world.sendMessage(`data: +${appsz} failed${fi}. tot: ${js.length} byte (${(js.length/1024).toFixed(1)} KB).`);
} else {
world.sendMessage('failed data');
}
}
function deld() {
const m = getm();
for (const mi of m) {
if (!mi) continue;
mi.mob.setDynamicProperty('data', undefined);
}
world.sendMessage('delete');
}
function prc() {
const m = getm();
for (const mi of m) {
if (!mi) continue;
const mob = mi.mob;
const t = mob.getTags();
if (t.includes('dynamic')) {
shinf();
mob.removeTag('dynamic');
}
if (t.includes('over')) {
appnd();
mob.removeTag('over');
}
if (t.includes('delete_data')) {
deld();
mob.removeTag('delete_data');
}
}
}
system.runInterval(() => {
prc();
}, 10); Post #102
31
script 1.1.0 шаблон скрипт entity.DynamicProperty