Estoy haciendo un mapa y va a haber muchas explosiones y no quiero que dañen los bloques.
I'he hecho /gamerule mobGriefing false pero there's todavía va a ser TNT bloque de daños.
¿Hay alguna forma de desactivar eso también?
Así que es complicado, pero no mucho peor que impedir que un jugador fabrique una espada de diamantes. La mayor diferencia aquí es que todo debe ocurrir en el mismo tick, y debe ocurrir cada tick. Esto excluye la estrategia que utilicé en la respuesta enlazada; un reloj de relleno de 20Hz es prácticamente una necesidad, mientras que en la otra respuesta podía utilizar un reloj más lento y sencillo. Para que esto funcione, usted todavía va a querer desactivar mob griefing, como I'm utilizando bolas de fuego ghast para crear la explosión real. También es posible tener el efecto, pero causa 0 daño a los jugadores u otras entidades, y I ' ll añadir los comandos para que al final.
El primer paso es configurar un objetivo marcador para realizar un seguimiento de TNT que's a punto de explotar:
/scoreboard objectives add TNTGoBoom dummy
A continuación, tenemos que configurar un "reloj de relleno". Necesitarás dos bloques de comandos en una columna con un bloque de aire separándolos. En la parte inferior, introduzca el siguiente comando:
fill ~ ~1 ~ ~3 ~1 ~ air
y en el superior, introduce este comando
fill ~ ~-1 ~ ~3 ~-1 ~ redstone_block
Ponga un bloque de piedra roja entre los dos, y usted tiene su reloj de relleno. Idealmente, esto no será cerca de un límite chunk, pero la mía era y todavía funcionaba bien. Pueden empezar a pasar cosas raras si parte de un reloj de relleno se descarga de la memoria, pero si es un chunk de spawn o siempre estás cerca del reloj, no tienes que preocuparte.
Deberías ver tres bloques más de redstone por un lado. Vas a colocar otros tres bloques de mando adyacentes a los bloques de redstone (preferiblemente por encima o por debajo). En orden de cercanía a los dos primeros bloques de comandos, los comandos que quieres usar son:
scoreboard players set @e[type=PrimedTnt] TNTGoBoom 1 {Fuse:0b}
execute @e[type=PrimedTnt,score_TNTGoBoom=1] ~ ~ ~ summon Fireball ~ ~ ~ {direction:[0.0,-1.0,0.0],ExplosionPower:4,Fuse:0,Time:-1,TileEntityData:{CustomName:"TNT"},ActiveEffects:[{Id:14,Duration:10,Amplifier:10,Ambient:1}]}
kill @e[type=PrimedTnt,score_TNTGoBoom=1]
Bien, repasemos esos tres comandos. El primero establece el valor del marcador para el objetivo TNTGoBoom a 1 por cada TNT que esté lista para explotar en el siguiente tick. Así hacemos un seguimiento de la TNT. El siguiente comando invoca una bola de fuego invisible en el lugar exacto de la TNT, moviéndose directamente hacia abajo, y con la misma potencia explosiva de un trozo de TNT. Esto es lo que realmente causará el efecto de explosión y daño a los jugadores/entidades, pero como el mob griefing está desactivado, no dañará el terreno. Finalmente, "matamos" (borramos) la TNT que está a punto de explotar para que no dañe el terreno.
Ahora bien, si quieres seguir teniendo el efecto de explosión sin causar ningún daño, entonces tienes que sustituir el comando de invocación de la bola de fuego por 2 bloques de comandos (y por lo tanto ampliar tu reloj de relleno un bloque más):
execute @e[type=PrimedTnt,score_TNTGoBoom=1] ~ ~ ~ particle hugeexplosion ~ ~ ~ 0 0 0 1
execute @e[type=PrimedTnt,score_TNTGoBoom=1] ~ ~ ~ playsound random.explode @a ~ ~ ~
Estos dos comandos crean el efecto de partículas y el sonido de la explosión de TNT, pero eso'es todo. No se produce ningún daño al mundo, a los jugadores ni a las entidades si usas esto en lugar del método de la bola de fuego.
Addendum: Esto realmente va a estropear cosas como los cañones de TNT. Tenía esto funcionando en mi mundo creativo donde estaba probando previamente un cañón infinito de TNT, y aunque funciona un poco (el proyectil de TNT todavía sale disparado un poco), tiene tendencia a enviar una bola de fuego al cielo. Además, usar esto significa que cada bloque de TNT debe encenderse individualmente, ya que con el mob-griefing desactivado, la bola de fuego no encenderá a otros cercanos. Estoy seguro de que hay una forma de evitarlo con un poco más de comando-bloque-fu. De hecho, sé que hay una forma de hacerlo, sólo que aún no conozco los detalles al 100%.
No en Vanilla Minecraft, no.
Usted necesitaría un plugin de servidor o un mod (preferiblemente WorldGuard) para hacer esto.
Hay una buena pregunta aquí que muestra cómo se puede hacer esto con World Guard.
Haz un artilugio que haga que un bloque de comandos se encienda y apague y encienda y apague y encienda, etc, etc. ahora, escribe /kill @e[type=PrimedTnt] en el bloque de comandos. Esto destruirá tnt tan pronto como se establece. ¡SIMPLE!