ботик
22 subscribers
9 photos
18 videos
28 files
2 links
На этом канале публикуются все истории (как и что я делаю в Майнкрафте).
Основной канал: https://t.me/botikdeadpriz
Download Telegram
Открытие меню с помощью тега
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
This media is not supported in your browser
VIEW IN TELEGRAM
Пример рандомных результатов
🔥1
Media is too big
VIEW IN TELEGRAM
Пример бега, ходьбы и
Буфер бега/ходьбы
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);
Media is too big
VIEW IN TELEGRAM
Пример показатель сердец
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