fill assumes that canFill was called before hand. True it can be used inside this method but then you will be calling the canFill method twice when trying to fill the block. Once again doFill has an entirely separate use then canFill. canFill is asking if the block at the location can be automatically filled by another class, such as a machine or pump. DoFill is saying it is or is not to actual change the block in the world. This way it can be set to false to retrieve the amount of the input volume was used to fill the block. In other world simulate the action without doing the action.