Перевод денег
import { world, system } from "@minecraft/server";
import { ModalFormData, ActionFormData } from "@minecraft/server-ui"; //на всякий случай добавил ActionFormData, если вдруг вам понадобится ообычные менюшки
function Banki(player) { //скорборд money
let form = new ModalFormData();
form.title(`Перевод счета с СБ`);
let lplayersList3g16x7p5cn = [];
let lplayerNames3g16x7p5cn = [];
for (const lPlayer3g16x7p5cn of world.getAllPlayers()) {
if (!lPlayer3g16x7p5cn.hasTag('Block')) { //данный тег удаляет игрока с списка (не использовать тег, если нет 2 игрока), если в всех будет тег, то меню не будет открываться из-за отсутствие игроков в списке
lplayerNames3g16x7p5cn.push(lPlayer3g16x7p5cn.name);
lplayersList3g16x7p5cn.push(lPlayer3g16x7p5cn);
}
}
form.dropdown(`Список игроков для перевода`, lplayerNames3g16x7p5cn);
form.textField(`Введите сумму`, `Рублей. . .`);
form.show(player).then(response => {
if (response.canceled) return;
let recipientName = lplayerNames3g16x7p5cn[response.formValues[0]];
let amount = parseInt(response.formValues[1]);
if (isNaN(amount) || amount <= 0) {
player.sendMessage(`§cПожалуйста, введите корректную сумму для перевода.`);
return;
}
player.runCommandAsync(`execute as @s[scores={money=${amount}..}] at @s run scoreboard players add "${recipientName}" money ${amount}`);
player.runCommandAsync(`execute as @s[scores={money=${amount}..}] at @s run tellraw "${recipientName}" {"rawtext":[{"text":"§aВам перевели ${amount}!"}]}`);
player.runCommandAsync(`execute at @s[scores={money=${amount}..}] run scoreboard players remove @s money ${amount}`);
player.runCommandAsync(`execute as @s[scores={money=${amount}..}] at @s run tellraw @s {"rawtext":[{"text":"§aВы перевели ${recipientName} ${amount}."}]}`);
player.runCommandAsync(`execute as @s[scores={money=!${amount}..}] at @s run tellraw @s {"rawtext":[{"text":"§cУ вас недостаточно средств"}]}`);
});
}
world.beforeEvents.itemUse.subscribe((eventData) => { //с помощью предмета
if (eventData.itemStack?.typeId === "minecraft:stick") {
let player = eventData.source;
system.run(() => {
banki(player);
});
}
});
system.runInterval(() => { //с помощью тега
for (let player of world.getPlayers()) {
if (player.hasTag("open")) {
system.run(() => {
banki(player);
player.runCommandAsync(`tag @s remove open`); //удаление тега после открытие
});
}
}
}, 20);🔥1
Показатель скорборда
import { world, system } from "@minecraft/server";
import { ActionFormData, ModalFormData } from "@minecraft/server-ui"; //ModalFormData на всякий случай
function prof(player) {
let form = new ActionFormData();
form.title(`меню`);
let money = getScore(player, "Money") || 0; // обработка undefined, также можно создать и 2 3 и т.д
form.body(`Ваш баланс: ${money}`);
form.button("Закрыть");
form.show(player).then((onfulfilled) => {
if (onfulfilled.canceled != true) {
const selection = onfulfilled.selection;
if (selection == 0) {
player.runCommadnAsync(``);
}
}
});
}
function rec(player, objective, min, max) {
if (min >= max) { // Изменено условие выхода из рекурсии
return min;
}
const middle = min + Math.floor((max - min) / 2);
const p1 = world.getPlayers({ name: player.name, scoreOptions: [{ objective: objective, minScore: min, maxScore: middle }] });
if (p1.length > 0) { // Изменено условие поиска
return rec(player, objective, min, middle);
} else {
return rec(player, objective, middle + 1, max); // Добавлено смещение middle
}
}
function getScore(player, objective) {
const p1 = world.getPlayers({ name: player.name, scoreOptions: [{ objective: objective, minScore: -2147483648, maxScore: 2147483647 }] });
if (p1.length === 0) {
return 0;
}
return rec(player, objective, -2147483648, 2147483647);
}
world.beforeEvents.itemUse.subscribe((eventData) => {
if (eventData.itemStack?.typeId === "minecraft:stick") {
let player = eventData.source;
system.run(() => {
prof(player);
});
}
});Калькулятор
import { world, system } from "@minecraft/server";
import { ModalFormData } from "@minecraft/server-ui";
function calUi(player) {
let form = new ModalFormData();
form.title(`Калькулятор`);
let working = ["+", "-", "/", "*"];
form.textField(`Первое число`, `100..`);
form.dropdown(`Действие`, working);
form.textField(`Второе число`, `100..`);
form.show(player).then(response => {
if (response.isCanceled) return;
let firstNumber = parseFloat(response.formValues[0]);
let operation = working[response.formValues[1]];
let secondNumber = parseFloat(response.formValues[2]);
let result;
switch (operation) {
case "+": result = firstNumber + secondNumber; break;
case "-": result = firstNumber - secondNumber; break;
case "/": result = firstNumber / secondNumber; break;
case "*": result = firstNumber * secondNumber; break;
default: result = "Неизвестная операция";
}
player.sendMessage(`Результат: ${result}`);
});
}
system.runInterval(() => {
for (let player of world.getPlayers()) {
if (player.hasTag("calculate")) {
system.run(() => {
calUi(player);
player.runCommandAsync(`tag @s remove calculate`);
});
}
}
}, 20);🔥1
Открытие меню с помощью тега
system.runInterval(() => {
for (let player of world.getPlayers()) {
if (player.hasTag("open")) {
system.run(() => {
(player);
player.runCommand(tag @s remove "open");
});
}
}
}, 20);1 буфер point
Скрипт
Скрипт
// Импортируем необходимые права
import { system, world } from "@minecraft/server";
import { ActionFormData, ModalFormData } from "@minecraft/server-ui";
// Функция для отображения основного меню игроку
function menu(player) {
let form = new ActionFormData(); // Создаем новое окно формы
form.title("Выберите раздел"); // Устанавливаем заголовок формы
form.button("Поставить точку"); // Добавляем кнопку для установки точки
form.button("Удалить точку"); // Добавляем кнопку для удаления точки
form.button("Просмотреть точки"); // Добавляем кнопку для просмотра точек
form.show(player).then((res) => { // Отображаем форму игроку
if (res.canceled || res.selection === undefined) return; // Проверяем на отмену
// В зависимости от выбранной кнопки вызываем соответствующую функцию
if (res.selection === 0) {
setPoint(player); // Установка точки
} else if (res.selection === 1) {
deletePoint(player); // Удаление точки
} else if (res.selection === 2) {
viewPoints(player); // Просмотр точек
}
});
}
// Функция для установки точки
function setPoint(player) {
let form = new ModalFormData(); // Создаем новую модальную форму
form.title("Меню"); // Заголовок формы
form.textField("Введите название точки", "Название"); // Поле ввода для названия точки
form.show(player).then((res) => { // Отображаем форму
if (res.canceled || res.formValues === undefined) return; // Проверка на отмену
const pointName = res.formValues[0]; // Получаем название точки
if (pointName) { // Если название указано
const pos = player.location; // Получаем текущую позицию игрока
const pointTag = point:${player.name}:${pointName}; // Создаем тег точки
const positionString = ${pos.x},${pos.y},${pos.z}; // Форматируем позицию как строку
player.addTag(pointTag); // Добавляем тег точки игроку
player.addTag(pos:${pointTag}:${positionString}); // Сохраняем позицию в тегах
player.sendMessage([Точки] Успешно создана точка ${pointName}); // Уведомляем игрока
}
});
}
2 буфер point
// Функция для удаления точки
function deletePoint(player) {
let form = new ActionFormData(); // Создаем новое окно формы
form.title("Удалить точку"); // Заголовок формы
const points = getPoints(player); // Получаем список точек игрока
points.forEach((point, index) => {
form.button(§c${point.name}\nНажмите чтобы удалить); // Добавляем каждую точку как кнопку
});
form.button("Назад"); // Кнопка для возврата
form.show(player).then((res) => { // Отображаем форму
if (res.canceled || res.selection === undefined) return; // Проверка на отмену
if (res.selection === points.length) {
menu(player); // Возврат в меню
return;
}
const pointToDelete = points[res.selection].name; // Получаем название точки для удаления
const pointTag = point:${player.name}:${pointToDelete}; // Формируем тег точки
player.removeTag(pointTag); // Удаляем тег точки
player.removeTag(pos:${pointTag}:${getPointPosition(player, pointToDelete)}); // Удаляем тег позиции
player.sendMessage([Точки] Точка ${pointToDelete} удалена); // Уведомляем игрока
});
}
// Функция для просмотра точек
function viewPoints(player) {
let form = new ActionFormData(); // Создаем новое окно формы
form.title("Ваши точки"); // Заголовок формы
const points = getPoints(player); // Получаем список точек игрока
points.forEach((point, index) => {
form.button(${point.name}\nНажмите чтобы телепортироваться); // Добавляем каждую точку как кнопку
});
form.button("Назад"); // Кнопка для возврата
form.show(player).then((res) => { // Отображаем форму
if (res.canceled || res.selection === undefined) return; // Проверка на отмену
if (res.selection === points.length) {
menu(player); // Возврат в меню
return;
}
const pointToTeleport = points[res.selection]; // Получаем точку для телепортации
const pos = getPointPosition(player, pointToTeleport.name); // Получаем позицию точки
const [x, y, z] = pos.split(',').map(Number); // Преобразуем строку позиции в числа
player.teleport({ x, y, z }, { dimension: world.getDimension(player.dimension.id) }); // Телепортируем игрока
player.sendMessage([Точки] Телепортирован к точке ${pointToTeleport.name}); // Уведомляем игрока
});
}
3 буфер point
// Функция для получения списка точек игрока
function getPoints(player) {
const points = []; // Массив для хранения точек
const tags = player.getTags(); // Получаем теги игрока
tags.forEach(tag => {
if (tag.startsWith("point:" + player.name + ":")) { // Проверяем теги на соответствие
const pointName = tag.split(":").pop(); // Получаем название точки
points.push({ name: pointName }); // Добавляем точку в массив
}
});
return points; // Возвращаем массив точек
}
// Функция для получения позиции точки
function getPointPosition(player, pointName) {
const pointTag = point:${player.name}:${pointName}; // Формируем тег точки
const tags = player.getTags(); // Получаем теги игрока
for (const tag of tags) {
if (tag.startsWith(pos:${pointTag}:)) { // Проверяем теги на соответствие
return tag.split(":").pop(); // Возвращаем позицию точки
}
}
return null; // Если позиция не найдена, возвращаем null
}
world.beforeEvents.itemUse.subscribe((eventData) => {
if (eventData.itemStack?.typeId === "minecraft:stick") {
let player = eventData.source;
system.run(() => {
menu(player);
});
}
});
👍1
Буфер бега/ходьбы
import { world, system } from "@minecraft/server";
function isPlayerMoving(player) {
const playerVelocity = player.getVelocity();
const playerRotation = player.getRotation();
const rotationRadians = playerRotation.y * Math.PI / 180;
const forwardX = -Math.sin(rotationRadians);
const forwardZ = Math.cos(rotationRadians);
const thresholdRun = 0.25;
const thresholdWalk = 0.1;
const thresholdStop = 0.01;
const dotProduct = playerVelocity.x * forwardX + playerVelocity.z * forwardZ;
if (dotProduct > thresholdRun) {
player.runCommandAsync("title @a actionbar Бежит");
} else if (dotProduct > thresholdWalk) {
player.runCommandAsync("title @a actionbar идет");
} else if (dotProduct < thresholdStop) {
player.runCommandAsync("title @a actionbar Стоит на месте");
}
}
system.runInterval(() => {
const players = world.getAllPlayers();
for (const player of players) {
isPlayerMoving(player);
}
});При нажатии на блок
import { system, world } from '@minecraft/server';
world.afterEvents.playerInteractWithBlock.subscribe(eventData => {
const block = eventData.block;
if (block.typeId === "minecraft:chest") {
if (eventData.blockFace) {
eventData.player.runCommand("title @a actionbar да");
}
}
});Показатель сердец
import { world, system, Player } from "@minecraft/server";
const previousHearts = new Map();
function her() {
const players = world.getPlayers();
for (const player of players) {
const health = player.getComponent('health').currentValue;
const currentHearts = health / 2;
const playerId = player.id;
const prevHearts = previousHearts.get(playerId) || currentHearts;
player.runCommandAsync(`title @s actionbar ❤ ${currentHearts.toFixed(1)}`);
if (prevHearts > 6.0 && currentHearts <= 6.0) {
player.runCommandAsync(`tellraw @s {"rawtext":[{"text":"§cВнимание! Жизней становится меньше (6.0 сердец)"}]}`);
}
else if (prevHearts > 3.0 && currentHearts <= 3.0) {
player.runCommandAsync(`tellraw @s {"rawtext":[{"text":"§4Тревога! Сердец осталось мало (3.0 сердца)"}]}`);
}
else if (prevHearts > 1.0 && currentHearts <= 1.0) {
player.runCommandAsync(`tellraw @s {"rawtext":[{"text":"§4§lКРИТИЧЕСКИ! Осталось всего 1.0 сердце!"}]}`);
}
previousHearts.set(playerId, currentHearts);
}
}
system.runInterval(her);This media is not supported in your browser
VIEW IN TELEGRAM
Пример спавна поверхности блока
Спавн блоков на поверхности земли
import { world, system } from "@minecraft/server";
let active = false;
const block = "minecraft:gold_block";
const radius = 10;
const tag = "replace";
function checkMob() {
const mobs = world.getDimension("overworld").getEntities({ tags: [tag] });
return mobs.length > 0;
}
function placeBlocks() {
if (!checkMob()) {
active = false;
return;
}
const dimension = world.getDimension("overworld");
const players = world.getAllPlayers();
const mobs = dimension.getEntities({ tags: [tag] });
const targets = [...players, ...mobs];
for (const target of targets) {
const { x, z } = target.location;
const angle = Math.random() * Math.PI * 2;
const distance = Math.random() * radius;
const targetX = x + Math.cos(angle) * distance;
const targetZ = z + Math.sin(angle) * distance;
for (let y = 320; y >= -64; y--) {
const ground = dimension.getBlock({ x: targetX, y, z: targetZ });
if (ground?.typeId === "minecraft:grass_block" || ground?.typeId === "minecraft:dirt") {
const air = dimension.getBlock({ x: targetX, y: y + 1, z: targetZ });
if (air?.typeId === "minecraft:air") {
air.setType(block);
break;
}
}
}
}
}
system.runInterval(() => {
if (checkMob() && !active) {
active = true;
system.runInterval(placeBlocks, 1 * 20);
}
else if (!checkMob() && active) {
active = false;
}
}, 20);