Открытие меню с помощью тега
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);Скрипт удар по определенному мобу
import { world, system } from "@minecraft/server";
const mobcom = {
"minecraft:cow": "title @a title муу",
"minecraft:chicken": "title @a title чикен, банано",
"minecraft:cat": "title @a title мур",
"minecraft:pig": "title @a title свинота",
};
world.afterEvents.entityHitEntity.subscribe((event) => {
const { hitEntity, damagingEntity } = event;
if (damagingEntity?.typeId === "minecraft:player" && mobcom[hitEntity.typeId]) {
try {
damagingEntity.runCommandAsync(mobcom[hitEntity.typeId]);
} catch (error) {
console.error("Ошибка выполнения команды:", error);
}
}
});This media is not supported in your browser
VIEW IN TELEGRAM
Пример воспроизведения команды при ударе по определенному мобу
🔥1