docs: @Override
      public boolean parseParameters(Object params)
      {
          if (params == null || !(params instanceof BuildBattleDecorator))
              return false;
  
          this.params = (BuildBattleDecorator) params;
  
          this.sourceBounds = this.params.getGoalStructureBounds();
          this.destBounds = this.params.getPlayerStructureBounds();
          this.delta = new Vec3i(destBounds.getMin().getX() - sourceBounds.getMin().getX(),
                                 destBounds.getMin().getY() - sourceBounds.getMin().getY(),
                                 destBounds.getMin().getZ() - sourceBounds.getMin().getZ());
          
          this.structureVolume = volumeOfBounds(this.sourceBounds);
          assert(this.structureVolume == volumeOfBounds(this.destBounds));
          this.dest = new ArrayList<IBlockState>(Collections.nCopies(this.structureVolume, (IBlockState)null));
          this.source = new ArrayList<IBlockState>(Collections.nCopies(this.structureVolume, (IBlockState)null));
          
          DrawBlockBasedObjectType tickBlock = this.params.getBlockTypeOnCorrectPlacement();
          DrawBlockBasedObjectType crossBlock = this.params.getBlockTypeOnIncorrectPlacement();
  
          this.blockTypeOnCorrectPlacement = (tickBlock != null) ? new XMLBlockState(tickBlock.getType(), tickBlock.getColour(), tickBlock.getFace(), tickBlock.getVariant()) : null;
          this.blockTypeOnIncorrectPlacement = (crossBlock != null) ? new XMLBlockState(crossBlock.getType(), crossBlock.getColour(), crossBlock.getFace(), crossBlock.getVariant()) : null;
          return true;
      }