0

How do you use the /fill command to fill multiple things? For example, how do you use the /fill command to fill stone and cobblestone, all in random places inside where you set the coordinates? I'm making a prison game where there is a mine which refills itself with random ores and stone and stuff when you hit a button.

2

What you are asking for isn't a simple /fill, but a system that can generate a cube of stone filled with ores. Imagine the cube just being a bunch of stacked layers that each have been randomly filled with ores.

Summon an armorstand in the bottom corner at the -x -z side of the mine and name it `Layer

/summon ArmorStand x y z {CustomName:Layer,NoGravity:1,Invisible:1,Marker:1}

This will be the pointer of the current layer.
We will also need some armorstands to mark the ores

/execute @e[type=ArmorStand,name=Layer] ~ ~ ~ summon ArmorStand ~ ~ ~ {CustomName:Ore,NoGravity:1,Invisible:1,Marker:1}

You can name some of the armorstands GoldOre or DiamondOre ect for diffrent ores (The more armorstands summoned, the more ores per layer)
We will first of all fill the layer with stone. (our mine will be 11*11 in this example)

/execute @e[type=ArmorStand,name=Layer] ~ ~ ~ fill ~ ~ ~ ~10 ~ ~10 stone


now spread the armorstands randomly along the layer

/execute @e[type=ArmorStand,name=Layer] ~ ~ ~ spreadplayers ~5.5 ~5.5 0 5 false @e[type=ArmorStand,r=2,name=!Layer]

make the Ore armorstands place some ores below them (do this for all ore types)

/execute @e[type=ArmorStand,name=Ore] ~ ~ ~ setblock ~ ~-1 ~ coal_ore

Tp The ore armorstands to Layer

/tp @e[type=ArmorStand,name=Ore] @e[type=ArmorStand,name=Layer]

and finally tp Layer one block up and repeat

/tp @e[type=ArmorStand,name=Layer] ~ ~1 ~
  • How would I do it if it was a 20x20x20 mine? – Xandawesome Apr 9 '15 at 15:35
  • first of all, you need a larger amount of armorstands to keep the same ore density, other changes would be replacing the 10's in the fill with 19's, which will create a 20*20 layer, then for the spreadplayers you would use spreadplayers ~10 ~10 0 10 false @e[type=ArmorStand,name=Ore] – lennartVH01 Apr 9 '15 at 17:59
1

The fill command doesn't have a functionality like this. However, there is a way I can think of that you could make this work. It would be something like this:

In the area you would like to fill with blocks, you could place armor stands in each block location with NBT tags set to {Marker:1,Invisible:1,Invulnerable:1,NoGravity:1,CustomName:"block"}. This would make the armor stands have no hitbox, they would be invisible, indestructible, and not be effected by gravity.

From there, you could use the execute command like so

execute @r[type=!Player,name=block,c=4] ~ ~ ~ detect ~ ~ ~ air 0 setblock ~ ~ ~ gold_ore 0 replace

As an extension to the execute command, the detect component allows you to check if there is a certain type of block relative to the entity being targeted by the execute command. To change the number of random armor stands to select to perform the setblock command, just adjust the c=? portion to your liking. That would allow you to set maximum amounts of ore types and such that you would like to be generated.

The larger the area you wish to make mine-able, the more impractical this approach becomes. Hope it helps though.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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