Загрузка данных


Подойдёт надёжный вариант без модов/датапаков: кратковременно отключать выпадение блоков (gamerule doTileDrops) только на момент взрыва, а потом сразу включать обратно. Это делается через командные блоки + scoreboard — не нужно ничего дополнительно ставить (только права OP).

Идея: при обнаружении TNT с Fuse почти на 0 или взрывающегося крипера мы ставим doTileDrops false и запускaем таймер (несколько тиков). Таймер считает вниз, затем включаем doTileDrops true обратно. Таким образом блоки ломаются (станут air), но предметы не спавнятся.

Шаги (версия 1.21.1):

1) Создайте objective:
  /scoreboard objectives add explRestore dummy

2) Установите начальное значение:
  /scoreboard players set #expl explRestore 0
  /gamerule doTileDrops true

3) Поставьте 6 командных блоков (тип — Repeating или Chain, см. ниже).
   Вариант простой компоновки (все Repeat, Always Active) — можно поставить 6 повторяющихся блоков в ряд:

Командный блок 1 (Repeating, Always Active):
  execute as @e[type=minecraft:tnt,nbt={Fuse:1s}] at @s run gamerule doTileDrops false

Командный блок 2 (Repeating, Always Active):
  execute as @e[type=minecraft:tnt,nbt={Fuse:1s}] at @s run scoreboard players set #expl explRestore 6

Командный блок 3 (Repeating, Always Active):
  execute as @e[type=minecraft:creeper,nbt={Swell:1s}] at @s run gamerule doTileDrops false

Командный блок 4 (Repeating, Always Active):
  execute as @e[type=minecraft:creeper,nbt={Swell:1s}] at @s run scoreboard players set #expl explRestore 6

Командный блок 5 (Repeating, Always Active):
  scoreboard players remove #expl explRestore 1

Командный блок 6 (Repeating, Always Active):
  execute if score #expl explRestore matches 0 run gamerule doTileDrops true

Пояснения:
• Мы детектируем TNT с Fuse:1s (это за 1 тик до взрыва) и крипера с Swell:1s (аналогично, когда он готовится взорваться). В этот момент ставим doTileDrops false и запускаем счётчик #expl = 6.
• Каждый тик блок 5 уменьшает счётчик на 1. Через 6 тиков (≈0.3 с) счётчик дойдёт до 0, и блок 6 снова включит doTileDrops true.
• 6 тиков — с запасом, чтобы гарантировать, что взрыв уже произошёл и дропы не создались. Можно уменьшить или увеличить это число при тестировании.
• doTileDrops влияют глобально, но всего на доли секунды — минимальный побочный эффект. Альтернатива (локально убивать item-энтити) менее надежна из-за тайминга взрыва.

Важные замечания и возможные проблемы:
• Команды используют NBT-поля Fuse и Swell. В стандартной версии эти теги присутствуют (TNT: Fuse, Creeper: Swell). Если у вас какая‑то нестандартная сборка/плагин — теги могут отличаться.
• Во время короткого отключения doTileDrops другие источники выпадений (например, ломание игроком) не будут дропать предметы — но окно очень короткое, так что в большинстве случаев это незаметно.
• Если нужно точечно (только в определённой области) — можно модифицировать команды gamerule → вместо глобального менять локально: перед установкой doTileDrops false можно телепортировать игрока/использовать локальные манипуляции — но vanilla не поддерживает локальный doTileDrops; потому используем глобальный.
• Если вам строго запрещено менять gamerule, можно сделать альтернативный подход: при обнаружении Fuse:1s / Swell:1s сразу же kill @e[type=item,distance=..6] at @s — это убирает уже появившиеся дропы локально (но надо подобрать радиус). Однако отлов тайминга у TNT/крипера менее надежен (лучше ставить doTileDrops отключение).

Если хотите — могу:
• дать готовую схему командных блоков в виде точных шагов (в каком порядке ставить, какие флаги Chain/Conditional и т. п.);
• настроить меньший/больший таймер (количество тиков) и предложить вариант с локальным удалением item-энтити (kill @e[type=item,distance=..X]) вместо gamerule.