How can I make it so when a snowball hits snow the snow disappears? I am in 1.13.2 and trying to make a snowball spleef game.

/execute at @e[type=snowball,tag=ground] run fill ~ ~ ~ ~ ~ ~ snow replace air

I have tried that but it doesnt work. It may have something to do with 1.13.2.

  • 2
    What does "it does not work" mean? Does it do nothing, does it give an error message, does it blow up your house? Also, what have you tried to solve your issue? Any research, any other attempts, any plans? – Fabian Röling Jan 14 '19 at 4:45
/execute as @e[type=snowball] at @s if block ~ ~-1 ~ snow_block run setblock ~ ~-1 ~ air

in repeating command block will replace snow blocks under snowballs with air.

| improve this answer | |
  • This works, but its a bit unreliable – fraday15 Jun 8 '19 at 2:52
  • The problem is that if you throw the snowball 1 block higher than the snow blocks, it may make a long hole instead of single hole. – Tabin1000 Jun 9 '19 at 4:05

What's wrong with your command?

You're trying to use a tag called "ground". Tags are things you can add to entities or players. Entities don't spawn with specific tags. You need add a tag to something or spawn something with a tag using the Tags:[] nbt.

What I would do

You could execute all of the snowballs and summon armor stands that destroy blocks after a few ticks (so the snowball doesn't fall through the blocks). Then kill the armor stands. My setup can be replicated by this command:

summon minecraft:falling_block ~ ~1 ~ {BlockState:{Name:"stone"}, Time:1, Passengers:[{id:"falling_block", Time:1, BlockState:{Name:"redstone_block"}, Passengers:[{id:"falling_block", Time:1, BlockState:{Name:"activator_rail"}, Passengers:[{id:"command_block_minecart", Command:"gamerule commandBlockOutput false"},{id:command_block_minecart,Command:"scoreboard objectives add time dummy"},{id:command_block_minecart,Command:"setblock ~ ~3 ~ repeating_command_block[facing=up]{auto:1, Command:\"execute at @e[type=minecraft:snowball] run summon minecraft:armor_stand ~ ~ ~ {Marker:1,Invisible:1,NoGravity:1, Tags:[tag1]}\"}"},{id:command_block_minecart,Command:"setblock ~ ~3 ~1 repeating_command_block[facing=up]{auto:1, Command:\"scoreboard players add @e[type=minecraft:armor_stand] time 1\"}"},{id:command_block_minecart,Command:"setblock ~1 ~3 ~1 repeating_command_block[facing=up]{auto:1, Command:\"kill @e[type=minecraft:armor_stand,tag=tag1, scores={time=3}]\"}"},{id:command_block_minecart,Command:"setblock ~1 ~3 ~ repeating_command_block[facing=up]{auto:1, Command:\"execute at @e[tag=tag1, scores={time=2}] run fill ~1 ~1 ~1 ~-1 ~-1 ~-1 air replace minecraft:snow_block\"}"},{id:command_block_minecart,Command:"setblock ~ ~ ~1 command_block{Command:\"fill ~ ~-3 ~-1 ~ ~ ~ air\"}"},{id:command_block_minecart,Command:"setblock ~ ~-1 ~1 redstone_block"},{id:command_block_minecart,Command:"kill @e[type=command_block_minecart,distance=..1]"}]}]}]}
| improve this answer | |
  • If you post a single 1457 character command, it's extremely hard to figure out what it does. You should instead post all the individual commands and explain them one by one. – Fabian Röling Apr 20 at 4:49

What you want to try is if the snowball hits the ground, replace the snow with air and, lastly, kill the snowball entity.
An example: (run these commands in repeating command blocks, which are in your renderdistance, or in the spawnchunks, or run this in the looped function of a datapack):

  • execute as @e[type=minecraft:snowball,nbt={OnGround:1b}] at @s run setblock ~ ~ ~ air replace minecraft:snow_block
  • execute as @e[type=minecraft:snowball,nbt={OnGround:1b}] at @s run kill @s

This places air at the position of every snowball which has a ground hit, and then kills itself.

| improve this answer | |
  • This does not work. There is not a single tick in which the snowball is actually on ground, instead it gets destroyed immediately. – Fabian Röling Apr 20 at 4:53

Not the answer you're looking for? Browse other questions tagged or ask your own question.