Мне нужно, чтобы если у игрока 2 или более сахара, то у него удаляются 2 сахара. Вот то, что уже имеется:
/execute if entity @a[nbt={Inventory:[{id:"minecraft:sugar",Count:2b}]}] run clear @a minecraft:sugar 2
Как поставить "2 или более"?
Клиентские игры
Нужна помощь с командой в Майнкрафт 1.17.1
Проверка по NBT в селекторе использует точные значения, диапазон в ней указать действительно невозможно, как верно подметил автор предыдущего ответа. Но ведь нам и не обязательно использовать проверку по NBT.
Сделать проверку диапазона можно, как минимум, двумя другими способами:
1) через предикат
Это одна из новых полезных возможностей датапаков, добавленная в 1.15. Они довольно практичны, так как любое количество условий (с поддержкой диапазонов) можно записать в текстовом файле с особой структурой, а затем просто проверять все эти условия разом при помощи /execute if predicate <имя_предиката>.
Недостаток один – нужен датапак. Однако их создание – не такой уж и сложный процесс, как может показаться на первый взгляд. Вот гайд на тему предикатов в датапаках.
2) через переменную (задача/скорборд)
Как известно, при помощи конструкции "if score <игрок> <задача> matches 2.." можно указать проверяемый диапазон. Всё, что нам осталось сделать в этом случае – сохранить количество предметов в инвентаре в переменную. Думаю, с процессом её назначения вопросов возникнуть не должно, перейду сразу к важному.
Само получение количества предметов осуществляется при помощи модификатора "store" у /execute и интересного свойства команды /clear. Дело в том, что любая команда возвращает какой-то результат. Его можно записать куда-то при помощи /execute store result/success. Если указать в команде /clear какое-то количество очищаемых предметов, команда вернёт нам количество успешно очищенных предметов.
Интересность в том, что если указать 0 предметов для очистки, команда вернёт нам их общее количество в инвентаре и курсоре (т. е. если игрок в выживании держит предметы мышкой, полезно для детектора кликов), при этом никак на них не повлияв. Вот пример конструкции для записи в переменную:
/execute store result score <игрок/селектор> <задача> run clear <игрок> <предмет> 0
На практике удобнее использовать другую:
/execute as <игрок> store result score @s <задача> run clear@s <предмет> 0
Ну а затем уже можно спокойно использовать проверку диапазона хоть в /execute if score, хоть в самом селекторе (@a[scores={задача=2..}])
Сделать проверку диапазона можно, как минимум, двумя другими способами:
1) через предикат
Это одна из новых полезных возможностей датапаков, добавленная в 1.15. Они довольно практичны, так как любое количество условий (с поддержкой диапазонов) можно записать в текстовом файле с особой структурой, а затем просто проверять все эти условия разом при помощи /execute if predicate <имя_предиката>.
Недостаток один – нужен датапак. Однако их создание – не такой уж и сложный процесс, как может показаться на первый взгляд. Вот гайд на тему предикатов в датапаках.
2) через переменную (задача/скорборд)
Как известно, при помощи конструкции "if score <игрок> <задача> matches 2.." можно указать проверяемый диапазон. Всё, что нам осталось сделать в этом случае – сохранить количество предметов в инвентаре в переменную. Думаю, с процессом её назначения вопросов возникнуть не должно, перейду сразу к важному.
Само получение количества предметов осуществляется при помощи модификатора "store" у /execute и интересного свойства команды /clear. Дело в том, что любая команда возвращает какой-то результат. Его можно записать куда-то при помощи /execute store result/success. Если указать в команде /clear какое-то количество очищаемых предметов, команда вернёт нам количество успешно очищенных предметов.
Интересность в том, что если указать 0 предметов для очистки, команда вернёт нам их общее количество в инвентаре и курсоре (т. е. если игрок в выживании держит предметы мышкой, полезно для детектора кликов), при этом никак на них не повлияв. Вот пример конструкции для записи в переменную:
/execute store result score <игрок/селектор> <задача> run clear <игрок> <предмет> 0
На практике удобнее использовать другую:
/execute as <игрок> store result score @s <задача> run clear@s <предмет> 0
Ну а затем уже можно спокойно использовать проверку диапазона хоть в /execute if score, хоть в самом селекторе (@a[scores={задача=2..}])
именно так сделать нельзя, но ты можешь зациклить либо команду /execute, либо команду /clear до тех пор, пока у игрока не закончится сахар. в зависимости от того, что тебе нужно сделать.
но именно сделать условие "больше 2" - невозможно. по крайней мере через NBT
но именно сделать условие "больше 2" - невозможно. по крайней мере через NBT
Похожие вопросы
- Как убить игрока который нажал на кнопку в майнкрафте (1.17.1)
- Каково ваше мнение по поводу Майнкрафт 1.17?
- Глючат текстуры и интерфейс в minecraft 1.17, 1.17.1
- Какой есть мод который убирает фризы в майнкрафт 1.18.1 fabric, который совместим с sodium
- Нужна команда для майнкрафта, наверное для командного блока, нужен профессионал
- Майнкрафт 1.14.4 /execute Как сделать что бы когда игрок становился на каких то координатах срабатывала команда
- Подскажите команду для майнкрафта.
- какие классные команды в майнкрафте есть для командного блока версия 1 7 2
- какие классные команды в майнкрафте есть для командного блока версия 1.8
- СКАЖИТЕ КОМАНДЫ НА БРОНЬ БОГА В МАЙНКРАФТ 1.8