Игроки ищут способ открыть торговлю в мире Minecraft без модов. Самый частый запрос - сделать магазин, где нужные товары можно купить за ресурсы, а торговля запускается командами и командным блоком. Ниже - рабочий вариант на ванильных механиках.
Что понадобится
- Minecraft Java или Bedrock (принцип одинаковый, команды отличаются)
- Командные блоки
- Таблички или вывески для интерфейса (по желанию)
- Ресурсы для оплаты и товары для продажи
- Доступ к режиму с командным блоком (включить через настройки мира/прав права)
Чтобы магазин был удобным, сделаем базовую схему:
1) игрок кликает на точку рядом с магазином (через рычаг/кнопку/нажатие);
2) магазин проверяет, есть ли у игрока нужная валюта;
3) если валюта есть, магазин снимает оплату и выдает товар.
Настройка площадки
1) Постройте место торговли: стенка и стойка с кнопкой или рычагом.
2) Отведите отдельные блоки под логику проверок и выдачи (удобно, чтобы не путаться).
3) Убедитесь, что командные блоки активируются предсказуемо:
- поставьте нужные блоки в цепочку через редстоун;
- настройте повторители при необходимости.
Вариант на Java: магазин через scoreboard (универсально)
Этот вариант работает в обычном ванильном мире с командными блоками.
Шаг 1. Настройте “валюту” магазиновым показателем
Используем scoreboard как учет “денег”, чтобы проще проверять баланс.
Пример: валюта - coins, товар - любой предмет.
Выполните команды в чате (однократно):
/scoreboard objectives add coins dummy
/scoreboard objectives add price dummy
Теперь у каждого игрока появится поле coins после первой проверки. Чтобы его заполнить, обычно делают “ввод денег” командой или выдают монеты начально.
Шаг 2. Выдайте стартовую валюту игроку для теста
Например, вы тестируете магазин и хотите, чтобы у игрока были монеты:
/scoreboard players set <имя_игрока> coins 50
Шаг 3. Проверка: есть ли coins не меньше цены
Допустим товар стоит 20 coins. Тогда логика такая:
- если coins >= 20 - снимаем 20 и выдаем предмет.
Командные блоки лучше ставить так, чтобы “кнопка” запускала всю цепочку.
Пример команды для проверки и дальнейшего ветвления для одного товара:
execute as <имя_игрока> if score @s coins matches 20.. run say OK
На этапе отладки замените say OK на нужные команды ниже.
Шаг 4. Снятие оплаты и выдача товара
Чтобы магазин снимал деньги, используйте:
scoreboard players remove <имя_игрока> coins 20
А выдача предмета через команду (пример выдаем алмазы):
/give <имя_игрока> diamond 1
Теперь соберите это в цепочку командных блоков:
1) первый блок проверяет coins matches 20..
2) второй блок снимает coins
3) третий блок выдает товар
Удобный порядок для стабильности:
- “проверка” - импульсный командный блок
- “снятие” - следующий цепной
- “выдача” - следующий цепной
Вариант для нескольких товаров: таблица цен и команд
Сделайте отдельную ветку на каждый товар. Ниже шаблон подстраивается заменой price и команды выдачи.
| Товар (пример) | Цена | Проверка (coins >= цена) | Снятие | Выдача |
|---|---|---|---|---|
| Алмазы | 20 | execute as <игрок> if score @s coins matches 20.. run ... |
scoreboard players remove <игрок> coins 20 |
/give <игрок> diamond 1 |
| Железные слитки | 10 | execute as <игрок> if score @s coins matches 10.. run ... |
scoreboard players remove <игрок> coins 10 |
/give <игрок> iron_ingot 3 |
| Зачарованное яблоко (пример) | 50 | execute as <игрок> if score @s coins matches 50.. run ... |
scoreboard players remove <игрок> coins 50 |
/give <игрок> enchanted_golden_apple 1 |
Как сделать “кнопка нажата - покупка произошла”
Чтобы связать покупку с нажатием:
1) поставьте кнопку возле игрока;
2) направьте редстоун на импульсный командный блок проверки;
3) дальше цепочкой выполняйте снятие и выдачу.
Важно: если магазин покупает именно “нажавший” игрок, используйте конструкцию @p или @s корректно под вашу схему.
- Если кнопка стоит рядом с магазином, чаще всего удобно брать ближайшего игрока @p.
- Если магазин должен работать для конкретного игрока, используйте имя.
Пример с ближайшим игроком:
execute as @p if score @s coins matches 20.. run scoreboard players remove @s coins 20
Затем отдельным командным блоком выдавайте товар тому же игроку:
execute as @p if score @s coins matches 0.. run give @p diamond 1
Чтобы не было выдачи без снятия, выдачу лучше ставить в ту же ветку проверки (вместе с условиями).
Типичные ошибки
1) Команды не исполняются из-за настроек командных блоков. Проверьте “Включено”, “Всегда активен” или цепочку с редстоуном.
2) Неправильная цель (@p, @a, имя игрока). Магазин должен выдавать и снимать тому же игроку, который инициировал покупку.
3) Scoreboard не создан или не заполнен. Убедитесь, что objective существует, а coins есть у игроков.
4) За товар выдаются дубль-ресурсы. Это происходит, когда выдача не привязана к условию оплаты.
5) Логика не выдерживает повторного нажатия. Если кнопка может срабатывать быстро, добавьте задержку редстоуна через повторитель.
Полезные ссылки
- Официальная документация Minecraft (команды и scoreboard): https://minecraft.wiki/w/Command
- Minecraft Wiki: scoreboard (dummy objectives, проверки диапазонов): https://minecraft.wiki/w/Scoreboard
- Minecraft Wiki: execute (как комбинировать условия и владельца команды): https://minecraft.wiki/w/Commands/execute