ботик
22 subscribers
9 photos
18 videos
28 files
2 links
На этом канале публикуются все истории (как и что я делаю в Майнкрафте).
Основной канал: https://t.me/botikdeadpriz
Download Telegram
Перевод денег
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
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);